在Ember MVC TodoApp上有一个选项"Clear all Completed".
我一直在尝试做一个简单的"全部清除".
我尝试了很多东西,它们都没有像我预期的那样工作(清除数据,本地存储和刷新UI).
示例附带的代码如下:
clearCompleted: function () {
this.filterProperty(
'completed', true
).forEach(this.removeObject, this);
},
Run Code Online (Sandbox Code Playgroud)
我期望工作的基本测试是这样的:
clearAll: function () {
this.forEach(this.removeObject, this);
},
Run Code Online (Sandbox Code Playgroud)
但是,它留下了一些物品.
如果我在条目控制器中单击调用此函数的按钮几次,则列表最终为空.我不知道发生了什么事!而且不想做一个"解决方法".
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
Run Code Online (Sandbox Code Playgroud)
这样您就不会直接触摸内容属性,并且会通知任何观察者(如果您Todos.router.entriesController.clear()
在控制台中键入内容,您会在TodoMVC示例中注意到屏幕会更新).
如果您特别询问TodoMVC Ember示例,那么您将受到快速而肮脏的"Store"实施的支配...如果您按上述方式执行操作,则会在刷新页面时看到该项目的返回,因为没有绑定或观察在"控制器"和商店之间进行的操作(有点愚蠢,因为它是Ember的优势之一,但是我很高兴)
Anywho ... entriesController
你正在寻找的"clearAll"方法可以这样做:
clearAll: function() {
this.clear();
this.store.findAll().forEach(this.removeObject, this);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1336 次 |
最近记录: |