在ember视图中将控制器中的对象集合传递给数组

时间:2013-05-16 18:33:21

标签: ember.js

我想知道将一组模型对象传递给视图中定义的新数组的最佳方法是什么?

基本上:控制器中通过关联有很多人:

App.MeetingsNewController = Ember.ObjectController.extend({
    needs: ['people'],
    init: function() {
        var people = this.get('controllers.people'); 
        people.set('content', App.Person.find());
    }
});

然后在该控制器的模板中我定义了一个视图。在这个视图中,我希望让所有人都在控制器上设置并将它们放在一个数组中。选择一个后,我想将其移动到一个新的数组。很简单,但我无法完成这个过程。

App.SearchField = Ember.View.extend({
    availablePeople: [],
    selectedPeople: [],
    init: function() {
        // What needs to go here to push objects from controller.people to availablePeople? 
    }
});

我使用this.get('controller.people')和pushObjects尝试了各种各样的东西,但我似乎无法迭代视图模板中的列表:

{{#each view.availablePeople}}
    <li>
        {{ name }}
    </li>
{{/each}}

我错过了什么? 任何帮助非常感谢!

2 个答案:

答案 0 :(得分:0)

看看你的情况,在视图中访问控制器的最佳方法是为该视图提供一个控制器,可以从另一个控制器中引用而没有问题,让我在代码中解释一下:

首先,为SearchField视图创建一个控制器:

App.SearchFieldController = Ember.ObjectController.extend({
  needs: ['people'], //define here all controller that you need access to
  availablePeople: [],
  selectedPeople: [],
  init: function() {
    var people = this.get('controllers.people'); 
    // set your array's...
  }
});

然后将SearchField视图更改为SearchFieldView

App.SearchFieldView = Ember.View.extend({
  ...
});

之后,您需要对模板进行一些更改:

{{#each availablePeople}}
  <li>{{name}}</li>
{{/each}}

如果您已遵循Ember的命名约定,则SearchFieldController已由Ember自动实例化,并用于SearchFieldViewneeds SearchFieldController访问您的PeopleController也得到保证。

希望有所帮助

答案 1 :(得分:0)

我最终在控制器上解析了这个问题(将它解耦但很唉),使用像这样的计算属性:

availablePeople: function() {
    var people = App.Person.find();
    var selectedPeople = this.get('content.people'); 
    return people.filter(function(x) { return selectedPeople.indexOf(x) < 0 });
}.property('content.people.length')