我需要对触发Ember操作的HTML元素采取行动。
场景很简单,假设我有多行项目,每个项目都有一个动作,通过ajax提取一些数据。我想在ajax请求完成之前禁用该特定元素。
我检查了this
属性,但它引用了Component Class。
所以在下面的标记中,我想捕获组件类中的元素。
<td><button {{action 'cancel' transaction}} class="btn-danger btn">Cancel</button></td>
答案 0 :(得分:0)
在Ember中没有默认的禁用操作的方法。
您可以通过多种方式实现这一目标:
1)使用CSS和绑定控制器属性。
a.is-inactive {
pointer-events: none;
cursor: default;
}
然后,您必须将className绑定到控制器属性(非活动)。
<a {{action 'cancel'}} {{bind-attr class="isInactive:is-inactive"}}
2)您可以检查您的路线操作是否禁用了您的操作。使用任何特定的控制器来保存应用程序状态。
cancel: function() {
var controller = this.controller;
if ( controller.get('pendingAction') ) return;
controller.set('pendingAction', true);
this.ajax(...., function() {
....
controller.set('pendingAction', false);
}, function() {
....
controller.set('pendingAction', false);
});
}
3)建立自己的方式..
我在discourse forum讨论了这个案例。