(此问题是How do you update another controller's properties and have its value update?)的后续行动
我被告知我需要在我之前的文本示例中使用小写字母。但是,我目前正在开发一个稍微复杂的代码版本,它有更复杂的路由和更复杂的控制器名称。
有人可以通过与上一个问题中发布的答案类似的方法扩展正确的方式来引用更复杂的控制器吗?例如,{/ 1}}表示“/ examples / list”(示例资源中的列表路由)。
我已经包含了由直觉像素确定的以前的jsbin:
ExamplesListController
答案 0 :(得分:3)
要弄清楚如何引用需求数组的控制器,只需取出Controller
部分之前的任何内容并将第一个字母缩小。
ExamplesListController
:
App.ApplicationController = Ember.ObjectController.extend({
needs: ['exampleList'],
act: function() {
console.log('act');
var ctrl = this.get('controllers.exampleList');
ctrl.set('myvalue', 'and this is the replacement text');
}
})
答案 1 :(得分:2)
引用更复杂控制器的正确方法是使用控制器normalized
名称。
App.ApplicationController = Ember.ObjectController.extend({
needs: ['examplesList'],
act: function() {
var ctrl = this.get('controllers.examplesList');
console.log('Controller is: ', ctrl.toString());
}
});
控制器的规范化名称不依赖于其URL - 它与控制器在ember应用程序容器中的表示方式有关。要查看其工作原理,请查看DefaultResolver API Docs或normaize method source
当然,首先要了解如何命名控制器也很有帮助。请参阅:http://emberjs.com/guides/concepts/naming-conventions/ 为了更好地理解命名约定,
答案 2 :(得分:1)
对某些人的澄清:
如果您的控制器类是ExamplesListController
needs
参数将是:
needs: ['examplesList']
,
经验法则:小写第一个字母,然后从末尾删除“控制器”。 (单数/复数不是规范化方案的一部分,只有大写字母)。