在ember.js文档中,我发现了下一步:
控制器允许您使用显示逻辑来装饰模型。通常,您的模型将具有保存到服务器的属性,而控制器将具有您的应用程序不需要保存到服务器的属性。
我正在尝试为我的应用添加“选择”功能。
这是jsfiddle:http://jsfiddle.net/JWf7X/
似乎filter属性是按模型过滤的,而不是按控制器过滤的(因为console.log为空)。
this.filterProperty('isSelected', true); //managing models
如何正确编写removeSelected操作?
在控制器中存储“isSelected”的正确方法是什么?我认为为模型添加isSelected不是正确的方法,因为此属性不会通过REST API从服务器加载,也不会保存到它。
的application.js:
window.App = Ember.Application.create();
App.ApplicationAdapter = DS.FixtureAdapter.extend();
App.Test = DS.Model.extend({
title: DS.attr('string'),
});
App.Test.FIXTURES = [
{
id: 1,
title: 'Learn Ember.js',
},
{
id: 2,
title: '...',
},
{
id: 3,
title: 'Profit!',
}
];
App.IndexRoute = Ember.Route.extend({
model: function () {
return this.get('store').find('test');
}
});
App.IndexController = Ember.ArrayController.extend({
actions: {
removeSelected: function () {
var selected = this.filterProperty('isSelected', true);
console.log(selected);
}
},
});
App.TestController = Ember.ObjectController.extend({
isSelected: false,
});
的index.html:
<script type="text/x-handlebars" data-template-name="index">
<button {{action "removeSelected"}}>remove selected</button>
<ul>
{{#each itemController="test"}}
<li>
{{input type="checkbox" checked=isSelected}}
<label>{{title}}</label>
</li>
{{/each}}
</ul>
</script>
答案 0 :(得分:1)
在每个视图助手中查看源代码,使用itemController
。将创建一个新的阵列控制器而不是使用您的IndexController
。因此isSelected
内不会出现IndexController
。
如果您将itemController
设置为App.IndexController
,则可以使其正常工作:
<强> indexController的:强>
App.IndexController = Ember.ArrayController.extend({
itemController: "test",
actions: {
removeSelected: function () {
var selected = this.filterProperty('isSelected', true);
console.log(selected);
}
}
});
<强>的index.html:强>
<script type="text/x-handlebars" data-template-name="index">
<button {{action "removeSelected"}}>remove selected</button>
<ul>
{{#each}}
<li>
{{input type="checkbox" checked=isSelected}}
<label>{{title}}</label>
</li>
{{/each}}
</ul>
</script>
的更新小提琴