Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ember.js中从数组中删除记录的正确方法_Javascript_Ember.js_Ember Data - Fatal编程技术网

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

Javascript 在ember.js中从数组中删除记录的正确方法,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我希望能够为列表中的项目单击一个删除按钮,发送一个HTTP delete,然后只有在API返回一个成功代码时才实际删除记录 这是我目前的代码: App.FooController = Ember.ObjectController.extend({ actions: { removeFoo: function() { var foo = this.get('model'); var onFail = function(res

我希望能够为列表中的项目单击一个删除按钮,发送一个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);
        }
    }
});
这基本上是有效的。。。除了在
save
点将foo从DOM中删除外,如果调用了
rollback
,它将再次添加,但添加到
foo
对象数组的末尾


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

逻辑是,除非您从服务器获得成功,否则不要删除任何内容,然后它将正常工作

我将使用;有了它,每个项目都有自己的
ItemController
,您可以在其中看到一个标志
isVisible

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

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

  • 将它们保留在那里,保存整个数组时,跳过带有
    isVisible=false的那些
  • 添加一个计时器,在X秒后从DOM中删除
    isVisible=false
    中的项目
  • 来自DOM和API的删除/保存可能是ItemController的一部分,有点像给每个项添加“自毁”


    根据您希望在UI中进行的交互,可以重新排列这些指令。构建块将保持不变:ArrayController/ItemController。

    OK,但不是
    deleteRecord
    save
    一起导致ember发送HTTP DELETE吗?在尝试删除之前,我不知道如何获得成功。然后从您的阵列模型中删除它,并在删除操作后始终从服务器刷新该阵列,这将在您的uiI中提供更新的数据。我开始怀疑您没有使用Ember这么多。