2013-01-22 67 views

回答

4

如何解决:

似乎没有要任何东西不对您的意见或模板。如果您使用Ember路由器来管理视图,而不是通过appendTo手动创建它们,它们将会工作。因此,而不是:

var view = App.ParentView.create({ controller: App.ParentController.create() }); 
view.appendTo('#dvViewRender'); 

使用路由器:

App.Router.map(function() { 
    this.route("parent", { path: "/" }); 
}); 

,并定义应用程序模板:

<script type="text/x-handlebars">{{outlet}}</script> 

证明它!

工作小提琴这里:http://jsfiddle.net/mgrassotti/vQpe6/1/

为什么工作?

render帮助程序旨在用于Ember.Router托管视图的上下文中。当您致电{{render "child"}}时,ember会尝试为子模板查找适当的控制器类。

如果我真的想使用appendTo方法怎么办?

好的,但不能使用render帮手。其他选项:

  • {{partial 'child'}}将插入子模板,但不会将其连接到ChildView或ChildController

  • 使用的视图助手,它会插入App.ChildView,它的渲染它在上下文模板ParentController

  • 使用的出口,然后手动连接它与App.ChildController

的实例,以App.ChildView

* UPDATE(基于COMMENT)*

由于这种动态和独立的性质,我不能嵌入整个页面布局和在一个应用程序模板,因此,任何建议的部件在这种使用灰烬情景?

每个控件都可以是一个独立的应用程序。每个人仍然有一个路由器来管理它的状态,但通过设置history: none路由器将不会连接到浏览器的网址。例如:

var Widget2App = Ember.Application.create({ 
    rootElement: '#widget2', 
    history: 'none', 
    ApplicationView: Ember.View.extend({ 
    templateName: 'widget2', 
    }), 
    ParentView: Ember.View.extend({ 
    templateName: 'parent2', 
表示1个第2个烬应用

更新例如:不使用路由器http://jsfiddle.net/mgrassotti/L6aVB/

+2

感谢您的快速回复的原因很 1.我的应用程序是不是一个单一的网页应用程序,它是一个ASP.NET MVC应用程序,它有自己的路由机制 2.我的应用程序有一种widgetized的UI,就像[iGoogle.com](http://www.google.com/ig)那里的小工具独立工作,他人的知识可以动态添加,删除,重新定位。由于这种动态和独立的特性,我不能将整个页面布局和小部件嵌入到一个应用程序模板中 因此,在这种情况下使用Ember的任何建议? –

+1

没问题。您仍然可以使用路由器,只需设置'history:none',以便小部件路由不会影响您的整体应用程序。用一个例子更新了我的答案.. –

+0

这非常适合我的场景,我有一个小问题,可以有多个应用程序实例,并且会有使用此方法时需要注意的任何副作用/影响吗? –