今天我第四次阅读Trek's tutorial,希望这次能得到它(不要误解我的意思,这是一个很棒的资源,但我对客户端开发很新,发现该教程更倾向于专家)。无论如何,我注意到了这段代码:
<script type="text/x-handlebars" data-template-name="contributors">
{{#each person in controller}}
{{person.login}}
{{/each}}
</script>
很明显,我们在这里迭代控制器中的项目并在每次迭代中将它们称为person
。但controller
引用来自何处?这是一个由Ember定义并在每个视图的上下文中可用的特殊关键字吗?
如果controller
是Ember提供的特殊参考,我想了解更多有关它是如何工作的信息。您能否指出我的文档甚至是Ember源,其中定义了这样的关键字,以便我可以从视图内部了解其他参考资料以及它们如何工作?
答案 0 :(得分:2)
不,它不是一个特殊的关键字,它只是view
的一个属性,它是在使用下面描述的connectOutlet
方法时设置的:
index: Ember.Route.extend({
route: '/',
connectOutlets: function(router){
router.get('applicationController').connectOutlet('allContributors', [
{login:'wycats'},
{login:'tomdale'}
]);
}
})
如果你在下面的例子中看到,你会看到:
控制器能够在他们控制的视图中连接插座。在上面的例子中,我使用'allContributors'作为参数调用connectOutlet。这将为我们创建AllContributorsView的实例,将AllContributorsController的共享实例设置为视图的默认渲染上下文,并在应用程序模板中出现{{outlet}}的位置将其插入到视图层次结构中。第二个参数,我已经硬编码为两个对象文字的数组,被设置为控制器实例的内容。
所以connectOutlet
方法:
AllContributorsView
AllContributorsController
设置为视图的默认渲染上下文(这意味着视图的controller
属性设置为App.router.allContributorsController
,因为默认视图渲染上下文是其控制器,或者未设置控制器时的父视图上下文,请参阅the view context source code。{{outlet}}
出现的位置AllContributorsController
实例(此处为[{login:'wycats'}, ...]
)我建议你完整阅读这篇文章,然后尝试自己动手。 您还可以阅读很多Ember资源,请参阅this StackOverflow answer。