Ember isController V / s isRoute V / s isComponent

时间:2016-06-10 13:51:19

标签: javascript jquery ember.js

我有一个常见的mixin,其中包含从不同地方(路线/控制器/组件)触发的方法

我的问题是准确识别'this'的上下文的最佳方法是什么(即调用是否来自路径/控制器/组件)

我有这个

isRoute: Ember.computed('target', function() {
        const isUndefined = typeof this.get('target') === 'undefined'
        return isUndefined ? true : false
    }),

    isController: Ember.computed('target', function() {
        const isUndefined = typeof this.get('target') === 'undefined'
        return isUndefined ? false : true
    }),

但是,即使对于组件,isController也会返回true。所以它有点不明确。

我需要一种准确的方法来唯一识别所有3个。

3 个答案:

答案 0 :(得分:1)

我会建议不同的mixin用于不同的地方,然后通过使用另一个对象在mixins之间共享公共代码,而不是那样做。允许您在不将参议员代码混合在一起的情况下完成您的工作。

答案 1 :(得分:0)

你可以像这样接近

../ Mixin.js

Ember.Mixin.create({
    actions :{

        identifyFromLocation: function(isFromController, isFromRoute, isFromComponent) {
            if (isFromController) {
                //Do Process here if from controller
            }
            if (isFromModel) {
                //Do Process here if from Model
            }
            if (isFromComponent) {
                //Do Process here if from component
            }
        }
    }
});

../ route.js

Ember.Route.extend({
    actions: {
        sendToMixin() : function () {
            this.send('identifyFromLocation', false, true, false)
        }
    }
});

../ component.js

Ember.Component.extend({
    actions: {
        sendToMixin() : function () {
            this.send('identifyFromLocation', false, false, true)
        }
    }
});

../ controller.js

Ember.Controller.extend({
    actions: {
        sendToMixin() : function () {
            this.send('identifyFromLocation', true, false, false)
        }
    }
});

答案 2 :(得分:0)

我认为以相对保存的方式来验证某些东西是否是控制器只是使用instanceof

if(this instanceof Ember.Controller) {...}

这也适用于路线&组件。