2

(这个问题是如何更新另一个控制器的属性并更新其值的后续问题? )

有人建议我在之前的文本示例中需要使用小写字母。但是,我目前正在处理该代码的稍微复杂的版本,具有更复杂的路由和更复杂的控制器名称。

有人可以以类似于上一个问题中发布的答案的方法扩展正确的方法来引用更复杂的控制器吗?例如,ExamplesListController用于“/examples/list”(示例资源中的列表路由)。

我已经包含了由直观像素友好修复的以前的 jsbin:

App.ApplicationController = Ember.ObjectController.extend({
  needs: ['blah'],
  act: function() {
    console.log('act');
    var ctrl = this.get('controllers.blah');
    ctrl.set('myvalue', 'and this is the replacement text');
  }
});

http://jsbin.com/iCuVodO/2/edit

4

3 回答 3

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');
  }
})

JSBin 示例

于 2013-09-03T01:06:26.507 回答
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 文档normaize 方法源

当然,首先对如何命名控制器有一个很好的理解也是有帮助的。请参阅:http ://emberjs.com/guides/concepts/naming-conventions/ 为了更好地理解命名约定,

于 2013-09-03T01:06:41.157 回答
1

一些小澄清:

如果您的控制器类是ExamplesListController

needs参数是:

needs: ['examplesList'],

经验法则:第一个字母小写,最后去掉“Controller”。(单数/复数不是规范化方案的一部分,只是大写)。

于 2013-09-03T20:16:22.533 回答