我想知道将一组模型对象传递给视图中定义的新数组的最佳方法是什么?
基本上:控制器中通过关联有很多人:
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}}
我错过了什么? 任何帮助非常感谢!
答案 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自动实例化,并用于SearchFieldView
和needs
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')