2015-12-01 2 views
0

У меня есть список, если элементы в маршруте items, который использует компонент event-item для отображения каждого из них. Этот компонент имеет два вычислен на нем, которые устанавливают некоторые классы прямо сейчас, чтобы показать пользователю некоторую информацию о каждом элементе ...Маршрут, который наблюдает свойство на компоненте, который ссылается на него

classNameBindings: ['winning','closed'], 
item: null, 
winning: Ember.computed('item.item_high_bid_user_id','userService.user_id',function(){ 
    return this.get('item.item_high_bid_user_id') == this.get('userService.user_id'); 
}), 
closed: Ember.computed('item.item_status',function(){ 
    return this.get('item.item_status') === 2; 
}) 

В компоненте шаблона каждый элемент в списке, завернутый в link-to, что ссылки маршрут item, в котором отображается один элемент.

В item шаблоне и даже маршрут я хотел бы отметить, что winning и closed вычисленных-х, которые находятся на соответствующем компоненте, чтобы показать или скрыть некоторые вещи в item шаблоне (IE. Спрятали раздел торгов, если элемент закрыт, и т. д.)

Что было бы правильным способом сделать это?

КСТАТИ Я на Ember 2.2.0 Ember данных 2.2.0 и Эмбер-Cli 1.13.13

ответ

0

Если event-item компонент связывает с item маршрута, я полагаю, вы передаете модель элемента в link-to хелперов, что означает все атрибуты, необходимые для вычисления этих свойств, все еще будут доступны в контроллере item.

// templates/whichever-template-holds-items.hbs 
{{#each items as |item|}} 
    {{event-item model=item}} 
{{/each}} 


// templates/components/event-item.hbs 
<div> 
    {{link-to 'item' model}} // pass model to item route 
</div> 


// controllers/item.js 
import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    // include userService 

    winning: Ember.computed.equal('model.item_high_bid_user_id','userService.user_id'), 
    closed: Ember.computed.equal('model.item_status', 2) 
}); 


// templates/item.hbs 
{{#if winning}} 
    // show winning stuff 
{{/if}} 

{{#if closed}} 
    // show closed stuff 
{{/if}} 

Кроме того, я заметил, что вы имели сочетание обоего == и === для вашего условных в коде вы публикуемый. Большую часть времени вы захотите использовать ===, see this post.

Почти забыл - Ember.computed.equal


UPDATE (в ответ на ваш комментарий ниже)

Есть несколько способов, чтобы предупредить контроллер, что значение в компоненте изменилось, но ни действительно способствуют вашей текущей ситуации.

Первый способ (это нормально делать) - следовать за DDAU (данные вниз, действия вверх) и отправить действие от вашего компонента до вашего контроллера, , но это работает только в том случае, если компонент находится внутри контроллера вид, что не соответствует тому, что вы делаете.

Второй способ (который не идеален для ИМО) - использовать сервис в виде паба/подмашины, который позволит дистанционным компонентам/контроллерам разговаривать друг с другом (you can read more about this method here). Вероятно, вы столкнетесь с смешанными ответами, так как это может быть отвратительным для потока данных вашего приложения. Но иногда выбор ограничен.

С учетом всего этого, я бы, вероятно, придерживался повторного вычисления в контроллере, вместо того, чтобы пытаться отправлять данные через ваше приложение с одного контроллера на другой. В конце концов, это все равно будет меньше кода и меньше работы для структуры. Надеюсь, это было полезно.

+0

Я не знал о 'computed.equal' Я переключусь на это, спасибо за указатель. Итак, что вы здесь говорите, мне действительно нужно переопределить вычисление на контроллере элемента?Это то, что я делаю сейчас, но это значит, что я рассчитал их в двух местах, и я подумал, что, возможно, есть способ сократить объем дублирования здесь. – Jordan

+0

@ Jordan Я обновил свой ответ, чтобы ответить на ваш комментарий. –

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