2014-12-20 38 views
0

Ember的Em.ArrayProxyEm.Array有许多可用于通知观察者对content所做更改的程序方法。例如:Ember ArrayProxy的最佳做法

  • arrayContentDidChange
  • arrayContentWillChange
  • enumerableContentDidChange
  • enumerableContentWillChange
  • contentArrayWillChange

Em.ArrayProxy也有操纵ArrayProxy内容的几种方法。例如:

this.pushObject('something random'); 
// Or 
this.insertAt(2, 'something random'); 

使用后者时的方法,没有一个必须结合前方法中使用它们?看来愚蠢的Ember的通常自动化财产观察员将在这里需要手动踢,但我不觉得the documentation很清楚。

回答

1

不,你不必使用任何方法结合。

如果你想添加项目到你的ArrayProxy,只需pushObject()。您将通过只使用方法,并看到这只是工作知道这一点。

从文档:

这混入实现观察员友好阵列的行为。它不是一个具体的实现,但它可以通过希望出现像阵列其他类用完。

http://emberjs.com/api/classes/Ember.Array.html

Ember.Array是一种类的,在其他的编程语言(不混入)接收的接口的名称。

ArrayProxy包装实现Ember的任何其他对象。阵列

http://emberjs.com/api/classes/Ember.ArrayProxy.html

Ember.ArrayProxy正是它的名字说,代理,周围已经实现Ember.Array接口的任何对象包装。

其他方法,你提到,可能会执行/如果你正在的Ember.Array自己的“继承”覆盖。一些必须被实现来使你的子类ArrayProxy友好。或者,如果您想添加自定义行为,可能会在arrayContentDidChange时写入日志,然后重写该方法并添加应用程序需要的任何逻辑。

这是面向对象编程,所有这些解释超出了任何框架文档的范围。

0

你问pushObject等等是否引发这些事件?

documentation for insertAt

这将使用原始replace()方法指定索引处插入的对象。

documentation for replace

你也应该调用this.enumerableContentDidChange()

所以,是的,一个正确实施ArrayProxy将引发这些事件,当您添加或删除的东西。