【问题标题】:Ember data difference between find() and getById()find() 和 getById() 之间的 Ember 数据差异
【发布时间】:2013-11-20 15:48:15
【问题描述】:

我知道有一个问题叫: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() 首先查看它是否在存储缓存中,只有在没有找到时才获取。有人能启发我吗?

【问题讨论】:

  • 对不起,我没有仔细阅读问题:-(我删除了我的anwser
  • 你的模型是如何定义的?你能提供一个 JsFiddle 或类似的吗?
  • @Edu 当然,我现在没有时间,但是我下班后会发布一个。感谢您的帮助
  • 当你说“不会工作”时,你是什么意思?你的意思是你在某个地方有另一个没有获得新类别的 catalog-id-1 实例?如果是这样,您需要使用该实例。 getById 正在返回对已获取记录的引用(如果存在); find 为您提供了该对象的“镜像”,未连接到现有对象。
  • @MichaelJohnston 当我尝试访问属性时,我抛出了一个错误,并且我的目录。它是“未定义的”。

标签: javascript ember.js ember-data


【解决方案1】:

this.store.find('catalog', 1); 不返回记录,它返回一个DS.PromiseObject。因为,如果您的记录不在记录缓存中,则需要向服务器发出请求。如果记录已经加载,你仍然有 promise 对象,以保持相同的方法行为,但不会向服务器发送请求。

this.store.getById('catalog', 1); 从记录缓存中返回对象(如果存在)。这可能是因为您已经使用 this.store.find('catalog');this.store.find('catalog', 1); 加载了目录

您可以使用then 方法从DS.PromiseObject 获取目录记录:

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);
    })
},

【讨论】:

  • 顺便说一句,这也是在路由模型钩子之外以编程方式设置控制器模型时必须做的事情。
猜你喜欢
  • 2015-02-21
  • 2011-09-16
  • 1970-01-01
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
相关资源
最近更新 更多