Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
Ember.js 余烬-清除阵列Proxy_Ember.js - Fatal编程技术网

Ember.js 余烬-清除阵列Proxy

Ember.js 余烬-清除阵列Proxy,ember.js,Ember.js,在Ember MVC TodoApp上有一个选项“清除所有已完成” 我一直在尝试做一个简单的“全部清除” 我尝试了多种方法,但都没有达到我的预期效果(清除数据、本地存储和刷新UI) 示例附带的代码如下所示: clearCompleted: function () { this.filterProperty( 'completed', true ).forEach(this.removeObject, this); }, 我期望进行的基本测试是:

在Ember MVC TodoApp上有一个选项“清除所有已完成”

我一直在尝试做一个简单的“全部清除”

我尝试了多种方法,但都没有达到我的预期效果(清除数据、本地存储和刷新UI)

示例附带的代码如下所示:

clearCompleted: function () {
    this.filterProperty(
            'completed', true
        ).forEach(this.removeObject, this);
},
我期望进行的基本测试是:

  clearAll: function () {
            this.forEach(this.removeObject, this);
        },
尽管如此,它还是留下了一些东西

如果我在Entries控制器中单击调用此函数的按钮几次,列表将变为空。我不知道发生了什么事!而且不想做“变通”

顺便说一句,clearCompleted工作得很好。

好吧,这很有效:

clearAll: function () {
    for (var i = this.content.length - 1; i >= 0; i--) {
        this.removeObject(this.content[i]);
    }
},

如果有人能确认这是不是正确的方法,那就太好了

答案取决于您真正想知道的内容——如果您想清除ArrayProxy,根据问题标题,只需在ArrayProxy实例上调用
clear()
,例如:

var stuff = ['apple', 'orange', 'banana'];
var ap = Ember.ArrayProxy.create({ content: Ember.A(stuff) });
ap.get('length'); // => 3
ap.clear();
ap.get('length'); // => 0
这样,您就不会直接接触content属性,任何观察者都会得到通知(在TodoMVC示例中,您会注意到,如果在控制台中键入
Todos.router.entriesController.clear()
,屏幕会更新)

如果您特别询问TodoMVC Ember示例,那么您将受制于快速而肮脏的“存储”实现。。。如果您按照上面的方法操作,您将在刷新页面时看到物品的返回,因为条目“controller”和商店之间没有绑定或观察(这有点愚蠢,因为这是Ember的优势之一,但是meh whatev)

不管是谁。。。您正在寻找的
entriesController
上的“clearAll”方法可以按如下方式执行:

clearAll: function() {
    this.clear();
    this.store.findAll().forEach(this.removeObject, this);
    }

现在还不能确定,但在我看来,
removeObjects
有一个bug。我也遇到了你描述的同样的问题。哈,有道理!是的,我主要是想从todo应用程序中学习。就像你说的,这些物品会在刷新后重新出现,所以我认为这不是解决问题的办法。谢谢你的解释。