Ember.js并选择多个模型进行删除

时间:2013-10-16 22:13:07

标签: javascript ember.js

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

1 个答案:

答案 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>

这是这个工作http://jsfiddle.net/marciojunior/BKUyk/

的更新小提琴