的方法之一是刚在控制器中的第二个列表:
App.FooController = Ember.ArrayController.create({
selectedContent: [],
selectToggle: function(event) {
var selectedContent;
selectedContent = this.get(selectedContent);
if (selectedContent.contains(event.context)) {
return this.set('selectedContent', selectedContent.without(event.context));
} else {
return this.get('selectedContent').push(event.context);
}
}
});
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each foo in controller}}
<li {{action selectToggle foo}}>{{foo.name}}</li>
{{/each}}
</ul>
</script>
这只是维持在控制器单独列出,并推动移除基于/上是否被选择的项目。
您也可以使用Ember.ObjectProxy通过“isSelected”属性来增加foo对象的值。
App.FooController = Ember.ArrayController.create({
selectedContent: @get('content').map(function(item){
Ember.ObjectProxy.create({
content: item
isSelected: false
});
});
});
<script type="text/x-handlebars" data-template-name="index">
<ul>
{{#each foo in controller.selectedContent}}
<li {{bindAttr class= "foo.isSelected"}}{{action selectToggle foo}}>{{foo.name}}</li>
{{/each}}
</ul>
</script>
然后在你的selectToggle方法中,你恰好设置foo的isSelected属性。
非常感谢Andre。我今天会尝试。你能否也请告诉我Ember.ArrayProxy的解决方案是怎么样的?我想知道Ember的所有可能性,以便能够为这个和未来的问题选择正确的解决方案。 – Marc
您能否告诉我如何从模板访问selectedContent列表,例如使用不同样式渲染选定的行? – Marc
这样做你需要使用ObjectProxy方法。我已经更新了答案。 –