替代与EmberJS /数据的关联

时间:2012-02-16 04:08:17

标签: javascript model-view-controller ember.js local-storage ember-data

我已经在EmberJS应用程序上工作了大约一个星期,并为EmberJS / Data编写了我自己的localStorage适配器以允许数据持久性。该应用程序是一个小笔记应用程序。理想情况下,我希望有一个Notebook模型,它有许多与之相关的Note模型。

但是,我还没有找到导致可变数组的方法。虽然你可以“实现”一个hasMany关系......

Noted.Note = DS.Model.extend({
  title: DS.attr('string'),
  note_text: DS.attr('string'),
});

Noted.Notebook = DS.Model.extend({
  title: DS.attr("string"),
  notes: DS.hasMany(Noted.Note)
});

...由hasMany方法创建的ModelArray在EmberJS中是不可变的。看来这个目前正在进行中--EmberJS / Data here有一个“关联”分支 - 但修改ModelArray对于这个应用程序至关重要,即创建一个新的注释:

var notebook = Noted.store.createResource(Noted.Notebook, {
  title: "Foo Notebook"
});
notebook.get("notes").pushObject(Noted.store.createResource(Noted.Note, {
  title: "Bar Note",
  note_text: "Blah blah blah."
}));
notebook.get("notes").objectAt(0).get("title") //returns undefined

虽然EmberJS / Data的最新提交确实包含数组可变性,但它仍然没有任何观察结果 - 在进行更改时不会通知适配器,并且它们不会被保存。

我想知道:在将此功能添加到EmberJS / Data之前,什么是hasMany关联的最佳替代方案?我一直在研究不同的模式,例如在Notebook模型中有一个音符ID数组,并带有某种类型的fetch / retrieve接口,但我已经无处可去了。今天我花了相当多的时间试图找出最好的方法来做到这一点,而我所拥有的只是很多挫败感。

1 个答案:

答案 0 :(得分:1)

Ember-data最终会到达那里。在那之前,我目前只是改变数组并手动调用所有相应的存储方法来反映变异。