1

在 ember.js 文档中,我发现了下一个:

控制器允许你用显示逻辑装饰你的模型。通常,您的模型将具有保存到服务器的属性,而控制器将具有您的应用程序不需要保存到服务器的属性。

我正在尝试向我的应用程序添加“选择”功能。

这是jsfiddle:http: //jsfiddle.net/JWf7X/

似乎过滤器属性是按模型过滤,而不是按控制器过滤(因为 console.log 是空的)。

this.filterProperty('isSelected', true); //managing models

如何正确编写 removeSelected 操作?

在控制器中存储“isSelected”的正确方法是什么?我认为为模型添加 isSelected 不是正确的方法,因为此属性不会通过 REST API 从服务器加载,也不会保存到其中。

应用程序.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,
});

索引.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>
4

1 回答 1

1

itemController在每个视图助手中使用 , 查看源代码。将创建一个新的数组控制器,而不是使用您的IndexController. 所以isSelected不会出现在里面IndexController

如果你设置itemControllerApp.IndexController你会得到这个工作:

索引控制器:

App.IndexController = Ember.ArrayController.extend({
  itemController: "test",
  actions: {
      removeSelected: function () {
        var selected = this.filterProperty('isSelected', true);
        console.log(selected);
      }
  }
});

索引.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/

于 2013-10-16T23:58:12.903 回答