ember.js - Emberjs - 无法使用appendTo和{{render}}助手渲染嵌套 View

标签 ember.js

我正在通过使用appendTo方法和{{render}}帮助器在嵌套 View 场景中尝试一个简单的事件处理机制,并且在加载时抛出“无法调用null的方法查找”错误

JSFiddle 相同 - Simple nested view event handling

还有一个观察结果是,如果我在应用程序模板中编写 {{render 'parent'}} 并从 java 脚本中删除父级的创建,一切都会正常工作,有什么想法吗?

最佳答案

如何修复:

您的 View 或模板似乎没有任何问题。如果您使用 Ember 路由器来管理 View 而不是通过appendTo 手动创建 View ,它们将会起作用。所以代替:

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>

Prove it!

在这里工作 fiddle :http://jsfiddle.net/mgrassotti/vQpe6/1/

Why does that work?

render 帮助器设计为在 Ember.Router 托管 View 的上下文中使用。当您调用 {{render "child"}} ember 尝试为子模板找到合适的 Controller 类。

What if I really want to use the appendTo method?

好的,但无法使用 render 帮助器。其他选项:

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

  • 使用 View 助手,它将插入 App.ChildView 并在 ParentController 的上下文中渲染其模板

  • 使用 socket ,然后使用 App.ChildController 的实例手动将其连接到 App.ChildView

* 更新(基于评论)*

Due to this dynamic and independent nature I can't embed the whole page layout and the widgets in one application template So any suggestions for using Ember in this kind of scenarios??

每个小部件都可以是一个单独的 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/

关于ember.js - Emberjs - 无法使用appendTo和{{render}}助手渲染嵌套 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14451634/

相关文章:

javascript - Ember.js 中的简单 console.log Controller 操作方法

javascript - Ember.JS最佳实践: Model vs Controller field binding

ember.js - Emberjs 1.x-pre- Ember.Router 和 Ember.compulated 问题

ember.js - “Unable to find view” 仅当未显示在初始页面上时

templates - 如何使用 Ember.Handlebars.compile() 在类定义中声明 Ember 模板?

ember.js - 路由中的 Ember queryParams 与 Controller 中的查询参数

javascript - Ember Router - 确定路由/资源是否是当前路由的子路由

javascript - EmberJS + Handlebars : Re-Use rendered views

javascript - 过滤 Ember.ListView 中的某些元素。 JSfiddle里面

ember.js - 将负 isDirty 与禁用类连接