【问题标题】:Ember.js: How to get an array of model IDs from a corresponding array of model attributesEmber.js:如何从相应的模型属性数组中获取模型 ID 数组
【发布时间】:2015-07-30 22:54:04
【问题描述】:

对于我在 Ember-Data 中拥有的标签模型,我的商店中有 4 条记录:

标签:

id   tag_name
1    Writing
2    Reading-Comprehension
3    Biology
4    Chemistry

在我的代码中,我有一个 tag_names 数组,我想获得一个相应的标签 ID 数组。我有两个问题:

  1. 即使我的商店中有这些标签,我的服务器仍在被查询。当我调用 store.find('tag', {tag_name: tag_name}) 时,我没想到需要调用服务器。这是我用来尝试创建 ID 数组的所有代码。

    var self = this;
    var tagsArray = ["Writing", "Reading-Comprehension", "Chemistry"];
    var tagIdArr = []
    tagsArray.forEach(function(tag_name) {
        return self.store.find('tag', { tag_name: tag_name }).then(function(tag) {
            tagIdArr.pushObject(tag.get('content').get('0').get('id'));
        })
    })
    return tagIdArr;
    
  2. 当我 console.log 时,上面代码的输出给了我一个长度为 0 的空数组对象。单击空数组旁边的插入符号会显示三个具有正确数据的键值对。但是数组是空的。我确信对这种行为有一个简单的解释,但我不确定为什么会这样。我已经在其他地方成功使用过类似上面的代码了。

【问题讨论】:

    标签: ember.js ember-data ember-cli


    【解决方案1】:

    Find 会命中服务器,但 peek 不会。

    var tagsArray = ["Writing", "Reading-Comprehension", "Chemistry"];
    return this.store.peekAll('tag').filter(function(tag){
        return tagsArray.indexOf(tag) !== -1;
      }).mapBy('id');
    

    见:http://emberjs.com/blog/2015/06/18/ember-data-1-13-released.html#toc_reorganized-find-methods

    【讨论】:

    • 啊,我想我需要升级我的 Ember 版本。我会这样做并回复你。谢谢!
    • @kaustubhb Pre 1.13 你可以改用store.all('tag')
    • 谢谢!我通过对您的代码稍作改动使其工作。我仍在循环遍历 tagsArray(使用 forEach),然后调用 `self.store.all('tag').filterProperty('tag_name', tag_name)。感谢您向我展示过滤功能。我将尝试更改它,以便我使用你所拥有的。
    猜你喜欢
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多