在视图中访问项目控制器

时间:2013-09-12 17:53:48

标签: ember.js

我有以下设置:

App.AreasController = Ember.ArrayController.extend({
  itemController: 'area'
});

// In my project route:
setupController: function(controller, model) {
  this.controllerFor('areas').set('content', model.areas);
}

在我看来,我正在编辑我的App.Areas,并希望从我的视图中为给定的area调用一个控制器方法(itemController)。我该怎么做?

如果我尝试访问控制器area.get('controller')(其中area代表model.areas中的一个项目),则会返回unknown

如果我area.send('save'),我会遇到Error: Attempted to handle event 'save' on <App.Area:ember1013:5230a2ee945f3b718a00006e> while in state root.loaded.saved.的错误。有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

我想你会想要这样的东西:

{{#each}}
  <li {{action toggleEdit}}>
     <!-- Other stuff goes here -->
  </li>
{{/each}}

App.AreaController = Ember.ObjectController.extend({
    isEditing : false,
    toggleEdit : function(){
       this.set('isEditing', !this.get('isEditing'));
    }
});

这是一个总体思路的JSBin:http://jsbin.com/ucanam/1045/edit

在您的视图中,“下一级”是itemController,而不是项本​​身。您实际上不需要尝试从项目中获取控制器,因为控制器位于视图和项目之间。所以,你只需要直接在itemController上调用方法。