【问题标题】:Ember: View is not updating after request, when using RESTAdapterEmber:使用 RESTAdapter 时,视图在请求后未更新
【发布时间】:2013-09-20 12:33:12
【问题描述】:

我们使用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});
  }
});

我们可以正确加载待办事项,但如果我们想删除其中一项,则 DELETE 请求已成功发送到后端,但待办事项并未从 UI 中删除。

编辑: 删除动作是:

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

【问题讨论】:

  • 你能显示删除发生的动作吗?
  • 我已更新问题并添加了删除操作。
  • 做 todos belongTo 什么?
  • @chopper:没有belongTo
  • 您能否提供更多代码以将其置于上下文中?

标签: ember.js ember-data


【解决方案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});
  }
});

【讨论】:

    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多