Javascript 如何以编程方式触发操作?
我有这个看法Javascript 如何以编程方式触发操作?,javascript,ember.js,Javascript,Ember.js,我有这个看法 App.ApplicationView = Em.View.extend({ templateName: 'application', actions: { myAction: function() { // } } }); 假设我想从另一个视图方法(如didInsertElement)手动触发该操作,如: App.ApplicationView = Em.View.extend({ templ
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在视图方法中未定义。您可以将mixin与以下内容一起使用:
默认情况下,使用不带参数的this.triggerAction()
将操作发送到控制器,但是如果需要以不同的目标为目标,请定义target
选项,如示例所示
工作
希望有帮助。只有在视图使用
Ember.TargetActionSupport
mixin时,triggerAction()
方法才存在。如果不是这样,请使用this.get('controller').send('action')改为code>。要在同一控制器中调用动作,您可以使用发送
this.send('nameOfAction', someParams);
this.sendAction('nameOfAction', someParams);
要从组件调用父控制器中的操作,请使用sendAction
this.send('nameOfAction', someParams);
this.sendAction('nameOfAction', someParams);
@直觉像素有没有办法将参数传递给动作?@JonKoops,要真正传递参数,你应该使用可以传递的上下文和控制器:并从中获取你所需的值/参数等。回答很好直觉像素,如果triggerAction调用的操作包含参数,那么如何将参数传递给triggerAction。例如myAction(param),那么当从triggerAction调用此操作时,我们如何传递参数?@Parijat Kalia,附议您的问题!编辑:在这里找到答案:@ParijatKalia我知道;-)谢谢你的提问!triggerAction()完全存在。您阅读的问题不正确,this.get('controller').send('action')将调用控制器中actions对象triggerAction()中声明的操作用于从问题所述的同一视图中触发操作。triggerAction不存在-如果您没有使用Ember。TargetActionSupport mixintriggerAction
确实存在,但使用它肯定更有意义。