共享计算属性代码

时间:2014-12-03 19:31:28

标签: ember.js

拥有一个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中的计算属性代码。任何人都可以给我一个暗示在Ember中分享代码的正确方法吗?混合?一个组件?将功能添加到用户模型(听起来完全错误)?

1 个答案:

答案 0 :(得分:4)

你可以像这样创建一个mixin:

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')
});

然后,您可以在访问用户模型的每个位置访问它。