在我的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);
这是一个增加相互理解精神的问题。谢谢你的答案!
答案 0 :(得分:3)
他们的工作方式相同,但不必。解释:
ArrayController
是ArrayProxy
和ControllerMixin
的组合。所以......
您使用的第一种方式this.pushObject()
来自ArrayProxy
。它的行为就像一个数组,因此所有的数组方法都是如此。在后台,此调用会修改content
属性,但这是一个实现细节。这让我想起......
this.get('content').pushObject()
是一个实现细节。 ArrayProxy
代理content
属性,但不一定如此。 Ember可能会在明天更改它以代替proxy_content
属性。 (别担心,他们不会。)重点是你应该考虑content
属性私有API。
this.get('model').pushObject()
可能就是您要使用的那个。 model
来自ControllerMixin
,是公共API。 model
和content
在这里是相同的,但同样,它们不一定是。此方法非常明确地表示您正在修改模型。如果您更改实施,它仍然可以正常运行。 (例如,如果切换到ObjectController
,它仍然有效。)
我有点挑剔,我只是想我会试着解释真正的差异。使用你想要的任何一个,但如果你像我一样肛门并喜欢做'正确'的事情,那就使用第三种方法。