首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >find()和getById()之间的数据差异

find()和getById()之间的数据差异
EN

Stack Overflow用户
提问于 2013-11-20 15:48:15
回答 1查看 3.1K关注 0票数 4

我知道有一个问题叫做:Ember :查找和findById之间有什么区别?。但是,如果我错了,请更正,但我认为它与较旧版本的Ember数据有关,因为我在电子数据文档中找不到这个方法。

我试图在我的目录中插入一个新的类别。这不管用:

代码语言:javascript
复制
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);
},

但这项工作:

代码语言:javascript
复制
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()首先查看是否在存储缓存中,只有在找不到的情况下才进行抓取。有人能启发我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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获得目录记录:

代码语言:javascript
复制
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);
    })
},
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20100447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档