2014-12-03 5 views
0

У меня есть представление Users_Index, где я обрабатываю всех пользователей. Для каждого пользователя я хочу показать вычисленное свойство. Я делаю это в соответствующем ItemController. Код:Доля вычисленного кода свойства

// app/controllers/users/index.js 
import Ember from 'ember'; 

export default Ember.ArrayController.extend({ 
    itemController: 'user' 
}); 

// app/controllers/user.js 
import Ember from 'ember'; 

export default Ember.ObjectController.extend({  
    myComputedProperty: function(){ 
    // just example nonsense here 
    return this.get('name') + ' and ' + this.get('id'); 
    }.property('name', 'id') 
}); 

// app/templates/users/index.hbs 
<ul> 
    {{#each}} 
    <li> 
     {{myComputedProperty}} 
    </li> 
    {{/each}} 
</ul> 

Теперь у меня есть мнение User_Show и хочу использовать вычисляемое свойство там. Конечно, я не хочу повторять вычисленный код свойства в users/show controller. Может ли кто-нибудь дать мне подсказку, что в Эмбере правильный способ поделиться кодом? Смесь? Компонент? Добавить функцию в пользовательскую модель (что звучит совершенно неправильно)?

ответ

3

Вы можете создать подмешать так:

App.ComputedProperty = Ember.Mixin.Create({ 
    myComputedProperty: function(){ 
     // just example nonsense here 
     return this.get('name') + ' and ' + this.get('id'); 
    }.property('name', 'id') 
}}; 

А потом добавить его к контроллеру, как этот

App.UserController = Ember.ObjectController.extend(App.ComputedProperty, function() { 
    . . . 
}); 

Дайте API для чтения here.

Или, вы можете добавить вычисленного свойство вашей модели пользователя, а не, как это:

App.User = DS.Model.extend({ 
    name: DS.attr(
    myComputedProperty: function(){ 
     // just example nonsense here 
     return this.get('name') + ' and ' + this.get('id'); 
    }.property('name', 'id') 
}); 

Тогда вы можете получить доступ к нему каждый, где доступ к модели пользователя.

+0

На ваш взгляд, что является самым чистым способом его реализации? Mixin или добавить его в модель? –

+0

Если вам понадобится только одна модель, то модель, вероятно, будет проще. Если вам нужно это на нескольких контроллерах после этого, то, возможно, mixin. – NicholasJohn16

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