Ember的Em.ArrayProxy
和Em.Array
有许多程序方法可用于通知观察者content
的变化。例如:
arrayContentDidChange
arrayContentWillChange
enumerableContentDidChange
enumerableContentWillChange
contentArrayWillChange
Em.ArrayProxy
还有几种操作ArrayProxy内容的方法。例如:
this.pushObject('something random');
// Or
this.insertAt(2, 'something random');
使用后一种方法时,是否必须将它们与前一种方法结合使用? Ember的通常自动化的财产观察员在这里需要手动踢,但我没有发现the documentation非常清楚,这似乎很愚蠢。
答案 0 :(得分:1)
不,你不必一起使用任何方法。
如果您想向ArrayProxy添加项目,只需pushObject()
。你可以通过使用该方法并看到它正常工作来了解这一点。
来自文档:
这个mixin实现了Observer友好的类似数组的行为。它不是一个具体的实现,但它可以被其他希望看起来像数组的类使用。
http://emberjs.com/api/classes/Ember.Array.html
Ember.Array
是一种类,在其他编程语言中(没有mixins)接收接口的名称。
ArrayProxy包装实现Ember.Array的任何其他对象
http://emberjs.com/api/classes/Ember.ArrayProxy.html
Ember.ArrayProxy
正是名称所说的代理,它包含了已实现Ember.Array
接口的任何对象。
如果您正在创建自己的"子类",您提到的其他方法可能会被实现/覆盖。 Ember.Array
。必须实现一些以使您的子类ArrayProxy友好。或者,如果要添加自定义行为,可以在arrayContentDidChange
时写入日志,然后重写该方法并添加应用程序所需的逻辑。
那就是面向对象编程,所有这些解释都超出了任何框架文档的范围。
答案 1 :(得分:0)
您在询问pushObject
等是否会触发这些事件?
这将使用原始的replace()方法在指定的索引处插入一个对象。
您还应该致电
this.enumerableContentDidChange()
所以,是的,正确实施的ArrayProxy
会在您添加或删除内容时触发这些事件。