我知道有一个问题叫做:Ember :查找和findById之间有什么区别?。但是,如果我错了,请更正,但我认为它与较旧版本的Ember数据有关,因为我在电子数据文档中找不到这个方法。
我试图在我的目录中插入一个新的类别。这不管用:
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()首先查看是否在存储缓存中,只有在找不到的情况下才进行抓取。有人能启发我吗?
发布于 2013-11-20 16:24:45
this.store.find('catalog', 1);不返回记录,而是返回一个DS.PromiseObject。因为,如果记录不在记录缓存中,则需要向服务器发出请求。如果已经加载了记录,那么您仍然可以保留相同的方法行为,但不会向服务器发送任何请求。
如果存在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);
})
},https://stackoverflow.com/questions/20100447
复制相似问题