我知道有一个名为Ember data: what is difference between find and findById?的问题。但是,如果我错了,请更正,但我认为它与旧版本的Ember数据有关,因为我在embet-data doc中找不到此方法。
我试图在我的目录中插入一个新类别。这不起作用:
newRecord: function() {
catalog = this.store.find('catalog', 1);
record = this.store.createRecord( 'category', {category_name_fr_sh: 'Nouvelle categorie'});
catalog.get('catalog_categories_ids').pushObject(record);
this.set('content', record);
},
但是这项工作:
newRecord: function() {
catalog = this.store.getById('catalog', 1);
record = this.store.createRecord( 'category', {category_name_fr_sh: 'Nouvelle categorie'});
catalog.get('catalog_categories_ids').pushObject(record);
this.set('content', record);
},
医生说
按指定类型和ID获取记录,而不触发提取。 如果记录可用,此方法将同步返回记录。否则,它将返回null。
我真的不明白为什么“劫持获取”不起作用。我认为find()首先看它是否在商店缓存中,只有在找不到时才获取。有人可以开导我吗?
答案 0 :(得分:6)
this.store.find('catalog', 1);
不会返回记录,而是返回DS.PromiseObject
。因为,如果您的记录不在记录缓存中,则需要向服务器发出请求。如果已经加载了记录,则仍然具有promise对象,以保持相同的方法行为,但不会向服务器发送请求。
this.store.getById('catalog', 1);
从记录缓存中返回对象(如果存在)。可能这项工作是因为您已使用this.store.find('catalog');
或this.store.find('catalog', 1);
您可以使用DS.PromiseObject
方法从then
获取目录记录:
newRecord: function() {
var self = this;
var catalogPromise = this.store.find('catalog', 1);
catalogPromise.then(function(catalog) {
var record = this.store.createRecord( 'category', {category_name_fr_sh: 'Nouvelle categorie'});
catalog.get('catalog_categories_ids').pushObject(record);
self.set('content', record);
})
},