我有一个常见的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个。
答案 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) {...}
这也适用于路线&组件。