Ember:使用RESTAdapter时,View在请求后没有更新

时间:2013-09-20 12:33:12

标签: ember.js ember-data

作为起点,我们使用了http://todomvc.com/architecture-examples/emberjs/。 我们将FixtureAdapter更改为RESTAdapter并执行了以下更改:

Todos.TodosActiveRoute = Ember.Route.extend({
  model: function(){
    // ** OLD CODE **
    // return this.store.filter('todo', function (todo) {
    // return !todo.get('isCompleted');
    // });
    // ** NEW CODE **
    return this.store.findQuery('todo', {isCompleted: false})
  },
  renderTemplate: function(controller){
    this.render('todos/index', {controller: controller});
  }
});

我们可以正确加载todo项目,但是如果我们要删除其中一个项目,则DELETE请求会成功发送到后端,但todo-item不会从UI中删除。

修改 删除操作是:

removeTodo: function () {
  var todo = this.get('model');
  todo.deleteRecord();
  todo.save();
}

1 个答案:

答案 0 :(得分:1)

问题在于在这里使用findQuery。它导致非实时数组。这就是删除后视图没有更新的原因(我想如果你添加一个待办事项,它应该不起作用)

您可以使用store.filter将查询和过滤功能传递给它。我认为它应该像你期望的那样工作。

Todos.TodosActiveRoute = Ember.Route.extend({
  model: function(){
    return this.store.filter('todo', {isCompleted: false}, function (todo) {
      return !todo.get('isCompleted');
    });
  },
  renderTemplate: function(controller){
    this.render('todos/index', {controller: controller});
  }
});