我正在通过使用 appendTo 方法和{{render}}
助手在嵌套视图场景中尝试一个简单的事件处理机制,并且在加载时抛出“无法调用 null 的方法查找”错误
相同的 JSFiddle -简单的嵌套视图事件处理
{{render 'parent'}}
再观察一下,如果我在应用程序模板中编写并从 java 脚本中删除父级的创建,这一切都很好,有什么想法吗?
我正在通过使用 appendTo 方法和{{render}}
助手在嵌套视图场景中尝试一个简单的事件处理机制,并且在加载时抛出“无法调用 null 的方法查找”错误
相同的 JSFiddle -简单的嵌套视图事件处理
{{render 'parent'}}
再观察一下,如果我在应用程序模板中编写并从 java 脚本中删除父级的创建,这一切都很好,有什么想法吗?
怎么修:
您的视图或模板似乎没有任何问题。如果您使用 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
*更新(基于评论)*
由于这种动态和独立的性质,我无法将整个页面布局和小部件嵌入到一个应用程序模板中。那么对于在这种情况下使用 Ember 有什么建议吗?
每个小部件都可以是一个单独的 ember 应用程序。每个仍然有一个路由器来管理它的状态,但是通过设置history: none
该路由器将不会连接到浏览器的 url。例如:
var Widget2App = Ember.Application.create({
rootElement: '#widget2',
history: 'none',
ApplicationView: Ember.View.extend({
templateName: 'widget2',
}),
ParentView: Ember.View.extend({
templateName: 'parent2',
更新的示例在一页中显示 2 个 ember 应用程序:http: //jsfiddle.net/mgrassotti/L6aVB/