0

我想知道将模型对象数组传递到视图中定义的新数组的最佳方法是在 ember 中吗?

基本上:有一群人通过控制器中的关联:

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}}

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

4

2 回答 2

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 的命名约定,那么SearchFieldControllerEmber 会自动实例化 并用于您的SearchFieldView和通过needsSearchFieldController的访问PeopleController也得到保证。

希望能帮助到你

于 2013-05-16T20:32:16.770 回答
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')
于 2013-05-24T12:07:24.733 回答