在ember.js中从数组中删除记录的正确方法

时间:2014-08-11 16:28:54

标签: javascript ember.js ember-data

我希望能够单击列表中项目的删除按钮,发送HTTP DELETE,然后仅在API返回成功代码时才实际删除记录。

这是我目前的代码:

App.FooController = Ember.ObjectController.extend({
    actions: {
        removeFoo: function() {
            var foo = this.get('model');

            var onFail = function(response) {
                alert(response.responseText);
                foo.rollback();
            };

            foo.deleteRecord();
            foo.save().then(function() {}, onFail);
        }
    }
});

这基本上有效...除了foo在save点从DOM中删除,如果调用rollback,它会再次添加,但是在数组的末尾Foo个对象。

我可以在rollback之后对该数组进行排序,但这似乎不是正确的方法。对于这种常见情况,是否有更好的ember.js模式?

2 个答案:

答案 0 :(得分:2)

我会使用ArrayController;有了它,每个项目都有自己的ItemController,你可以在其中拥有一个标记isVisible

因此,当您删除/撤消时,您可以切换该属性。

为了避免保存DOM中但隐藏的项目,我看到两个选项:

  1. 将它们留在那里,当保存整个数组时,跳过isVisible = false
  2. 添加一个计时器,在X秒后从DOM中删除isVisible = false
  3. 的项目

    来自DOM和API的删除/保存可以是ItemController的一部分,类似于添加"自我破坏"每个项目。

    根据您在UI中所需的交互,可以重新排列这些说明。构建块将保持不变:ArrayController / ItemController。

答案 1 :(得分:-1)

除非你从服务器获得成功,否则逻辑将不会删除任何东西,那么它将正常工作