我有这个观点
App.ApplicationView = Em.View.extend({
templateName: 'application',
actions: {
myAction: function() {
//
}
}
});
假设我想从另一个视图方法手动触发该操作,例如
didInsertElement
,例如:
App.ApplicationView = Em.View.extend({
templateName: 'application',
actions: {
sidebarShowHome: function() {
this.set('sidebarIsHome', true);
this.set('sidebarIsNotifications', false);
this.set('sidebarIsArchive', false);
},
},
didInsertElement: function() {
this.actions.sidebarShowHome();
}
});
我该怎么办呢?
this.actions
是视图方法中的 undefined
。
TargetActionSupport
mixin 与 this.triggerAction
:
App.ApplicationView = Ember.View.extend(Ember.TargetActionSupport, {
templateName: 'application',
actions: {
myAction: function() {
console.log('myAction');
}
},
didInsertElement: function() {
this.triggerAction({
action:'myAction',
target: this
});
}
});
默认情况下,使用不带参数的
this.triggerAction()
会将操作发送到控制器,但是,如果您需要定位不同的目标,请定义 target
选项,如示例中所示。
工作演示。
希望有帮助。
要在同一控制器中调用操作,您可以使用
send
。
this.send('nameOfAction', someParams);
要从组件调用父控制器中的操作,请使用
sendAction
。
this.sendAction('nameOfAction', someParams);
仅当视图使用
triggerAction()
mixin 时,Ember.TargetActionSupport
方法才存在。如果不是这种情况,请使用 this.get('controller').send('action');
代替。