Ember.js:这些.pushObject()是否同义?

时间:2014-06-05 15:37:37

标签: javascript ember.js

在我的Ember应用程序中,我有一个ArrayController,我在其中添加并从商店中删除记录。在将创建的记录添加到我的ArrayController之后,以下三个语句似乎也在做同样的事情。

 App.MyItemController = Ember.ArrayController.extend({

   ...
   var newItem = this.store.createRecord('item', {...});

   // do these lines do the same thing?
   this.pushObject(newItem);

 });

这些电话是否与上述同义?这些似乎都是相同的,并将其明显添加到模板中,并将删除该项目的操作。或者,有什么区别?

   this.get('model').pushObject(newItem);
   this.get('content').pushObject(newItem);

这是一个增加相互理解精神的问题。谢谢你的答案!

1 个答案:

答案 0 :(得分:3)

他们的工作方式相同,但不必。解释:

ArrayControllerArrayProxyControllerMixin的组合。所以......

  1. 您使用的第一种方式this.pushObject()来自ArrayProxy。它的行为就像一个数组,因此所有的数组方法都是如此。在后台,此调用修改content属性,但这是一个实现细节。这让我想起......

  2. this.get('content').pushObject()是一个实现细节。 ArrayProxy代理content属性,但不一定如此。 Ember可能会在明天更改它以代替proxy_content属性。 (别担心,他们不会。)重点是你应该考虑content属性私有API。

  3. this.get('model').pushObject()可能就是您要使用的那个。 model来自ControllerMixin,是公共API。 modelcontent在这里是相同的,但同样,它们不一定是。此方法非常明确地表示您正在修改模型。如果您更改实施,它仍然可以正常运行。 (例如,如果切换到ObjectController,它仍然有效。)

  4. 我有点挑剔,我只是想我会试着解释真正的差异。使用你想要的任何一个,但如果你像我一样肛门并喜欢做'正确'的事情,那就使用第三种方法。