0

看到这个jsFiddle

在将过滤器应用于数组自动绑定之前效果很好。但是在数组中添加过滤功能后,模板不会自动刷新。

对此进行测试。

App.FieldRoute = Ember.Route.extend({
  setupController: function(controller, model) {

      //scenario 1
      //controller.set('model', App.Fields);

      //scenario 2
      controller.set('model', App.Fields.filter(function(item, index, enumerable) {
        if(item.id === model.id) return true;
    }));
  }
});

使用场景 1(注释场景 2 和取消注释场景 1)运行 jsFiddle,然后单击“性别”,然后单击“添加”按钮,该按钮会将一个项目添加到数组中,它会立即反映在 UI 中。

使用场景 2 再次运行 jsFiddle。模板不会自动刷新。

4

1 回答 1

0

当您将 App.Fields 设置为内容时,您的方案 1 有效,因为内容包含与 App.Fields 数组相同的内存引用。因此,数组上的 push 或 pop 会反映到内容中。但是您的过滤操作(在 setupController 中)仅在您输入路由时执行一次。

您可以在控制器中使用过滤模型

  controller.setProperties({'model': App.Fields, filteringModel: model});

然后过滤你的内容

App.FieldController = Em.ArrayController.extend({
   displayArray: function(){
        return this.get('content').filterProperty('id',this.get('filteringModel.id'));
    }.property('content.@each','filteringModel') 
});

这是小提琴

于 2013-07-23T11:31:42.623 回答