我有这个观点
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未在视图方法中定义。
答案 0 :(得分:23)
您可以将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
选项,如示例所示。
工作demo。
希望它有所帮助。
答案 1 :(得分:14)
要在同一个控制器中调用操作,您可以使用 <ion-content class="padding">
<ion-list>
<ion-item >
<div style="z-index: 1000;" ng-click="test()"> CLICK HERE</div>
</ion-item>
</ion-list>
</ion-content>
。
angular.module('app', ['ionic']).controller('ctrl', function($scope){
$scope.test = function(){
alert('hello');
};
})
要从组件中调用父控制器中的操作,请使用 send
。
this.send('nameOfAction', someParams);
答案 2 :(得分:12)
如果视图使用triggerAction()
mixin,则Ember.TargetActionSupport
方法仅存在。如果不是这种情况,请改用this.get('controller').send('action');
。