Ember ArrayProxy的最佳实践

时间:2014-12-20 19:57:04

标签: ember.js

Ember的Em.ArrayProxyEm.Array有许多程序方法可用于通知观察者content的变化。例如:

  • arrayContentDidChange
  • arrayContentWillChange
  • enumerableContentDidChange
  • enumerableContentWillChange
  • contentArrayWillChange

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

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

使用后一种方法时,是否必须将它们与前一种方法结合使用? Ember的通常自动化的财产观察员在这里需要手动踢,但我没有发现the documentation非常清楚,这似乎很愚蠢。

2 个答案:

答案 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等是否会触发这些事件?

来自documentation for insertAt

  

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

来自documentation for replace

  

您还应该致电this.enumerableContentDidChange()

所以,是的,正确实施的ArrayProxy会在您添加或删除内容时触发这些事件。