2016-03-19 3 views
0

Я пытаюсь передать вторую модель компоненту. У меня есть несколько книг, упорядоченных по категориям. Категории выбираются с помощью Multi-Select-Box, и мне нужно передать категории (которые хранятся в моем db) в компонент. Мне не нужно менять категории, мне нужен массив. Где и как я могу запросить их и передать их, если я не хочу вставлять хранилище в компонент? (Нет способа построить отношения «многие ко многим», книги имеют только строковый массив для категорий).Передача нескольких данных хранилища Ember Component

Сейчас я пытаюсь сделать это:

книги/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

Компоненты не имеют моделей, у них есть только свойства. Если у вас две модели на вашем маршруте, вы можете передать вторую так же, как и с первой. Но без кода трудно угадать, что вы на самом деле делаете. – Jeff

+1

Вам нужно установить категории на контроллере, а не маршрут. '' 'setupController (controller) { this._super (... arguments); this.store.findAll ('category', (categories) => {controller.set ('categories'}) } '' ' – jax

ответ

1

Если вам не нужно выбирать категории afterModel, я рекомендую рассмотреть этот подход и отказаться от реализации afterModel.

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

Лично я переместил к определению модели маршруте, только если есть одна модель, связанная с маршрутом в вопросе (т.е. /books/thug-kitchen). В случае, когда у меня есть несколько моделей, которые применяются для данного маршрута, я предпочитаю использовать свойства.

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, но это не работает, если это более общее обещание. Хотел бы я лучше объяснить, но мое собственное понимание все еще очень просто.

После этого у вас не должно возникнуть проблемы с передачей обеих моделей на компонент.

Смежные вопросы