需要ember模型来返回数组promise而不是object

时间:2015-06-13 19:15:54

标签: javascript arrays ember.js ember-data emblem.js

我正在尝试将数组保证返回给我的模型,以便我可以在模板中循环遍历结果。我需要联系产品作为promise数组而不是promise对象返回。

型号:

App.ContactEditorRoute = Ember.Route.extend({
   model: function (params) {
    return Ember.RSVP.hash({
        contact: this.store.find('contact', params.id),
    /*need this to return array not an object which is currently does*/
        contactproducts: this.store.find('contactproduct',params.id),
        products: this.store.find('product') 
    })
}

模板:(使用标记标记)

each contactproduct in contactproducts
      p
        ' quantity
        contactproduct.quantity
        ' notes
        contactproduct.note

1 个答案:

答案 0 :(得分:1)

如果你真的希望它是一个数组,你的代码目前的结构方式,那么你可以做

contactproducts: this.store.find('contactproduct',params.id)
    .then(product => [product])

当您想对find的结果进行一些额外处理时,这是一种方法,但仍然会返回model旨在执行的承诺。

然而,正如另一张海报所说,这可能不是你想要做的。如果联系人产品是联系人的hasMany属性,则他们已经在那里(或者可能基于{async: true}为您提取)。

如果联系人没有hasMany('contactproduct'),那么您可能需要自己提取,但我怀疑联系人产品是否与联系人具有相同的ID。如果他们这样做,他们就不应该这样做。模型ID应该是唯一的。假设联系人产品的belongsTo指向contact,那么您希望这样做:

contactproducts: this.store.find('contactproduct', { contact: params.id })

返回(承诺)数组。

但是,通常在这种情况下,将附加检索放在afterModel钩子中会更好。这样可以让你model保持干净整洁。