Ember ArrayProxy的最佳做法
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的通常自动化的财产观察员在这里需要手动踢球,但我没有找到非常清楚的文件。
不,你不必一起使用任何方法。
如果你想添加项目到你的ArrayProxy,只需pushObject()
。 您只需使用该方法就可以知道这一点,并发现它只是起作用。
从文档:
这个mixin实现了Observer友好的类似Array的行为。 它不是一个具体的实现,但是它可以被其他希望像数组一样出现的类使用。
http://emberjs.com/api/classes/Ember.Array.html
Ember.Array
是其他编程语言(不带mixin)接收接口名称的类的一种类型。
ArrayProxy包装任何实现Ember.Array的其他对象
http://emberjs.com/api/classes/Ember.ArrayProxy.html
Ember.ArrayProxy
正是名称所说的代理,它包装了实现了Ember.Array
接口的任何对象。
您提到的其他方法可能会在您制作自己的Ember.Array
的“子类”时实施/覆盖。 一些必须被实现来使你的子类ArrayProxy友好。 或者,如果您想添加自定义行为,可以在arrayContentDidChange
时写入日志,然后覆盖该方法并添加应用程序需要的任何逻辑。
这就是面向对象编程,所有这些解释都超出了任何框架文档的范围。
你问是否pushObject
等等触发这些事件?
从insertAt
的文档:
这将使用原始的replace()方法在指定的索引处插入一个对象。
从replace
文档:
你也应该调用this.enumerableContentDidChange()
所以,是的,一个正确实施的ArrayProxy
会在你添加或删除东西时触发这些事件。