【发布时间】:2016-08-29 23:56:30
【问题描述】:
我在此页面上找到了一个很好的例子,说明了https://github.com/emberjs/ember.js/issues/11043 如何从组件继承。示例如下:http://emberjs.jsbin.com/rwjblue/443/edit?html,css,js,output
我玩了一些动作,尤其是动作,然后提出了这个问题:
如何设置组件的上下文?
考虑以下示例:
http://emberjs.jsbin.com/cofobanoca/edit?html,css,js,output
及其派生词
http://emberjs.jsbin.com/gipawemipe/1/edit?html,css,js,output
它们几乎相同,只是在第二个链接中,组件是在动作中动态创建的。
我的问题是,为什么第二个示例中的 {{this}} 是“生成的应用程序控制器”而不是“App.XBarComponent”?
编辑: 可能我不是很清楚。
我想要实现的是呈现一个包含输入字段的模式。这应该在应用程序模板中呈现(使用插座)作为整个页面的弹出窗口。 Modal 由两个组件构建,就像 foo 和 bar 一样。 BaseModal(即 Foo)和 LoginModalContent(即 Bar)是更好的名称。
单击 OK(在 BaseModal 中定义)时,我想调用 LoginModalContent 的 OK 操作,以便能够使用例如获取表单的值(在 LoginModalContent 中定义)。 this.get('用户名')。
【问题讨论】:
-
“上下文”到底是什么意思?
-
我的意思是模板内的
{{this}} -
this是驱动模板的对象。例如,对于与路由关联的顶级模板,它将是控制器。对于与组件关联的模板,它将是组件。不是你自己设置的。 -
所以实际上在
App.ApplicationRoute中使用this.render定义了上下文。这是一种在不覆盖上下文的情况下从 JavaScript 渲染组件的方法吗?
标签: javascript ember.js