2016-05-06 4 views
0

У меня есть атрибут, определенный в мой контроллер, какEmber атрибут контроллер доступа в общий маршрут/контроллер mxiin

myControllerAttr 

Также есть общий Mixin продлен как маршрут/контроллер (my-mixin.js)

сейчас в my-mixin.js существуют различные методы, которые вызываются из класса маршрута/контроллера

Мой вопрос заключается в этих методах mixin, как мне получить доступ к атрибуту контроллера myControllerAttr

так this.myControllerAttr не может работать всегда

Это будет зависеть от того, был ли этот метод вызывается из маршрута или контроллера класса

Должен ли я добавить, если условие OR, что является лучшим способом?

Итак, подведем итог, мой вопрос, как я могу проверить между

this.get('myControllerAttr') V/s 
this.controllerFor(this.routeName).get('myControllerAttr') 

ответ

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 где я реализовал то, что я предлагаю.

+0

Большое спасибо. У вас есть вопрос очень правильно ... но только одно ... В обоих местах (isRoute & isController) вы проверяете одно и то же ... const isUndefined = typeof this.get ('target') === 'undefined' Пожалуйста, подтвердите – testndtv

+0

Да, идея состоит в том, что она всегда будет проверять, что цель определена, потому что если она есть, вы находитесь в контроллере, если нет, в своем маршруте. Я искал источник на github и проверял маршруты и контроллеры, чтобы найти что-то немного «приятнее», и есть такие свойства, как isController и isRoute и т. Д., Но я не могу легко получить к ним доступ. Но на этот раз все должно быть хорошо. – TameBadger