我正在尝试将第二个模型传递给组件。我有几本按类别排序的书。这些类别由Multi-Select-Box选择,我需要将类别(存储在我的数据库中)传递给组件。我不需要改变我只需要一个数组的类别。如果我不想将商店注入组件,我在哪里以及如何请求并传递它们? (没有办法建立多对多关系,书籍只有类别的字符串数组。)
现在我正在尝试这样做:
书籍/ route.js
model() {
this.store.findAll('book');
}
afterModel() {
this.set('categories', this.store.findAll('category');
}
书籍/ template.hbs
{{#each books as |book|}}
{{book-details book=book categories=categories}}
{{/each}}
组件/书细节/ template.hbs
<h2>{{book.title}}</h2>
{{#each categories as |category|}}
<p>{{category.name}}</p>
{{/each}}
它不适用于这样的类别,所以我需要找到一种方法从商店获取它们并将它们传递给我的组件。
答案 0 :(得分:1)
如果您没有必要获取类别OnCreate
,我建议您考虑使用此方法并删除您的afterModel实现。
afterModel
就个人而言,只有在与相关路线相关联的单个模型(即model() {
return {
books: this.store.findAll('book'),
categories: this.store.findAll('category')
}
}
)时,我才开始定义路线模型。在我有多个适用于给定路线的模型的情况下,我倾向于使用属性。
答案 1 :(得分:0)
更好的方法是使用Ember.RSVP.hash
,如下所示:
model: function() {
return Ember.RSVP.hash({
books: this.store.findAll('book'),
categories: this.store.findAll('category')
});
},
setupController: function(controller, models) {
controller.setProperties(models);
}
如果服务器的响应延迟,此代码将最正常工作。泰勒的方法有效,但在发现完成之前,过渡到路线太快了。我认为他的方法之所以有用,是因为你使用的是Ember Data,但如果它是一个更通用的Promise,它就无法工作。我希望我能更好地解释,但我自己的理解仍然非常基础。
之后,如果将两个模型都传递给组件,则不应该有任何问题。