Ember Route model AdapterPopulatedRecordArray vs RecordArray

jog*_*ggg 7 ember.js ember-data

任何人都可以暗示ember/ember-data的内部工作原理:

在路径模型函数中,如果我使用contract.id值查询注释,则返回带有对象的AdapterPopulatedRecordArray对象.

Route返回AdapterPopulatedRecordArray:

model: function() {
    return this.store.find('comment', { contract: 1 });
},
Run Code Online (Sandbox Code Playgroud)

但是如果我不查询注释,则会返回带有对象的RecordArray对象.

Route返回RecordArray:

model: function() {
    return this.store.find('comment');
},
Run Code Online (Sandbox Code Playgroud)

关键的区别在于RecordArray类型实时更新对模板的更改,而AdapterPopulatedRecordArray不是并且是不可变的.我的目标是使第一个查询中的对象实时更新和可变.

我正在使用Ember 1.2/1.1.2和最新金丝雀/ beta3 Ember数据与Django Rest框架Ember数据适配器.提前感谢任何建议!

mon*_*cle 0

看看Store#find 是如何工作的this.store.find('comment', { contract: 1 })将调用 Store#findQuery。

#findQuery 的文档说

此方法返回一个承诺,一旦RecordArray服务器返回,该承诺就会被解决。

// #_findQuery
return resolve(promise).then(function(payload) {
  payload = serializer.extract(store, type, payload, null, 'findAll');
  // ...
  recordArray.load(payload);
  return recordArray;
Run Code Online (Sandbox Code Playgroud)

一旦DS.AdapterPopulatedRecordArray#load被调用,内容属性就被设置并且应该像 RecordArray 一样工作

this.setProperties({
  content: Ember.A(records),
  isLoaded: true,
  meta: meta
});
Run Code Online (Sandbox Code Playgroud)

当您查看时,是否还没有收到服务器响应this.store.find('comment', { contract: 1 })