gpt4 book ai didi

ember.js - Ember - 清除 ArrayProxy

转载 作者:行者123 更新时间:2023-12-02 05:58:27 25 4
gpt4 key购买 nike

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

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

我尝试了多种方法,但都没有按预期工作(清除数据、本地存储和刷新 UI)。

示例附带的代码如下:

clearCompleted: function () {
this.filterProperty(
'completed', true
).forEach(this.removeObject, this);
},

我期望工作的基本测试是这个:
  clearAll: function () {
this.forEach(this.removeObject, this);
},

不过,它留下了一些元素。

如果我在 Entries Controller 中单击调用此函数的按钮几次,则列表最终为空。我不知道发生了什么事!并且不想做一个“解决方法”。

顺便说一句,clearCompleted 可以完美地工作。

最佳答案

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

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 ”和 Store 之间进行绑定(bind)或观察(有点愚蠢,因为它是 Ember 的优势之一,但 meh whatev)

Anywho... entriesController 上的“clearAll”方法就像你正在寻找的那样可以这样做:
clearAll: function() {
this.clear();
this.store.findAll().forEach(this.removeObject, this);
}

关于ember.js - Ember - 清除 ArrayProxy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13409092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com