我有一个关于控制器需要属性如何与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
});
答案 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}}
帖子模板显示“嗨!”和应用程序,其他东西