javascript - Ember.js:这些 .pushObject() 调用是同义的吗?

标签 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);

这是本着增进相互理解的精神提出的问题。谢谢您的回答!

最佳答案

它们的工作原理相同,但并非必须如此。解释一下:

ArrayControllerArrayProxyControllerMixin 的组合。所以...

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

  2. this.get('content').pushObject() 是实现细节。 ArrayProxy 正在代理 content 属性,但事实并非如此。 Ember 明天可能会更改它以代理 proxy_content 属性。 (别担心,他们不会。)重点是您应该考虑将 content 属性视为私有(private) API。

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

我有点挑剔,我只是想尝试解释一下真正的差异。使用您想要的任何一种方法,但如果您像我一样是肛门并且喜欢做“正确”的事情,请使用第三种方法。

关于javascript - Ember.js:这些 .pushObject() 调用是同义的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24064446/

相关文章:

javascript - 如何在 Chrome 扩展中配置 Ember 路由?

javascript - VisualSearch.js : Is there a vanilla Javascript alternative to VisualSearch. js(多面搜索)?

javascript - 如果不是我们想要的,请删除子字符串?

javascript - 将 'Reveal All' 按钮替换为 'Reveal Less' onClick?

ember.js - EMBERJS : How to trigger an action in a child component?

javascript - Ember.js 文本突出显示为粉红色

ember.js - 在 ember 数据中,在 forEach 循环中调用 destroyRecord 会破坏循环吗?

javascript - 使用 ExpressJS 和 AngularJS

javascript - Handlebars 中的索引运算符说 Unexpected token ,

arrays - 从 Ember 中的模型对嵌套数组进行排序?