繁体   English   中英

将多个存储数据传递到Ember组件

[英]Passing multiple store-data to Ember Component

我正在尝试将第二个模型传递给组件。 我有几本按类别排序的书。 类别是由“多选框”选择的,我需要将类别(存储在我的数据库中)传递给组件。 我不需要更改类别,我只需要一个数组。 如果我不想将商店注入组件中,我在哪里以及如何请求它们并将它们传递下去? (没有办法建立多对多关系,这些书只有类别的字符串数组)。

现在,我正在尝试这样做:

books / route.js

model() {
  this.store.findAll('book');
}

afterModel() {
  this.set('categories', this.store.findAll('category');
}

books / template.hbs

{{#each books as |book|}}
  {{book-details book=book categories=categories}}
{{/each}}

组件/book-detail/template.hbs

<h2>{{book.title}}</h2>
{{#each categories as |category|}}
  <p>{{category.name}}</p>
{{/each}}

对于这样的类别,它不起作用,因此我需要找到一种从商店中获取它们并将它们传递给我的组件的方法。

如果不需要获取afterModel类别,建议您考虑使用这种方法并删除afterModel实现。

model() {
  return {
    books: this.store.findAll('book'),
    categories: this.store.findAll('category')
  }
}

就个人而言,仅在与所讨论的路线关联的模型(即/books/thug-kitchen )下,我才开始定义路线的模型。 在我有多个适用于给定路线的模型的情况下,我更喜欢使用属性。

更好的方法是使用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);
}

如果服务器的响应延迟,则此代码将最正确地工作。 泰勒(Tyler)的方法行得通,但是在完成查找之前,过早过渡到路线。 我认为他的方法行得通,因为您正在使用Ember Data,但是如果它是更通用的Promise,则行不通。 我希望我能解释得更好,但是我自己的理解仍然很基础。

之后,将两个模型都传递到组件应该没有任何问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM