公共路由/控制器mxiin内的Ember访问控制器属性

时间:2016-05-06 10:21:25

标签: javascript jquery ember.js

我在控制器中定义了一个属性

myControllerAttr

路由/控制器(my-mixin.js

也扩展了一个共同的mixin

现在在my-mixin.js中,有各种方法可以从路由/控制器类调用

我的问题是在这些mixin方法中,如何访问控制器属性myControllerAttr

因为this.myControllerAttr可能无法正常工作

这取决于该方法是从路由或控制器类调用的

我应该添加if条件还是最好的方法?

总而言之,我的问题是如何在

之间进行检查
this.get('myControllerAttr') V/s
this.controllerFor(this.routeName).get('myControllerAttr')

1 个答案:

答案 0 :(得分:0)

不确定这是否正是您所需要的,但可能是。

// mixins/type-checker.js
export default Ember.Mixin.create({
  isRoute: computed('target',function(){
    const isUndefined = typeof this.get('target') === 'undefined'
    return isUndefined ? true : false
  }),
  isController: computed('target',function(){
    const isUndefined = typeof this.get('target') === 'undefined'
    return isUndefined ? false : true
  }),
  getAttribute(attr){
    let attrYouWant
    if(this.get('isController')){
      attrYouWant = this.get(attr)
    }else{
      attrYouWant = this.controllerFor(this.routeName).get(attr)
    }
    return attrYouWant
  }
})

然后你可以像这样使用它:

//routes/application.js

import TypeChecker from '../mixins/type-checker'

export default Ember.Route.extend(TypeChecker, {
  actions: {
    test(){
      const testProp = this.getAttribute('prop')
      console.log(testProp)
    }
  }
})

这是twiddle,我已经实现了我的建议。