Ember Mixins和需求属性

时间:2015-02-06 15:56:36

标签: ember.js

我有一个关于控制器需要属性如何与mixin相关的一般性问题

假设我有一个购物卡模型,它位于应用程序控制器中,因此它可以在应用程序的任何位置使用

// application route
export default Ember.Route.extend({
  setupController: function(controller, model) {
    this._super(controller, model);
    controller.set('cart', this.store.createRecord('cart'));
  }
});

现在任何其他需要使用购物车的控制器,我想提供一个mixin:

// mixins/cart-access
export default Ember.Mixin.create({
  needs: ['application'];
  cart: Ember.computed.alias('controllers.application.cart')
});

// some controller
export default Ember.Controller.extend(CartAccess, {});

这一切都很好,但是如果在另一个控制器中我将needs属性设置为其他内容会导致问题吗?

// some other controller
export default Ember.Controller.extend(CartAccess, {
  needs: ['some-other-controller'] // not inlcuding application
});

1 个答案:

答案 0 :(得分:3)

前进并做了一个实验,mixin的需求将与控制器的需求合并。

示例:https://github.com/DVG/need-experiment

//application route
export default Ember.Route.extend({
  setupController: function(controller, model) {
    this._super(controller, model);
    controller.set('hello', "Hi!")
  }
});

//hi mixin
export default Ember.Mixin.create({
  needs: ['application'],
  hello: Ember.computed.alias("controllers.application.hello")
});

//people contntroller
import Hi from 'needs/mixins/hi';
export default Ember.Controller.extend(Hi,{});

//posts controller
import Hi from 'needs/mixins/hi';
export default Ember.Controller.extend(Hi, {
  needs: ['something-else']
});

//posts.hbs
{{hello}}
{{needs}}

帖子模板显示“嗨!”和应用程序,其他东西