Ember 动作完成时禁用按钮
Ember Disable button while an action is completing its process
template
{{input type="email" value=email placeholder="email"}}
<button {{action "addUser"}} type="submit">Add</button>
controller
export default Controller.extend({
actions: {
addUser: function(){
//some codes here
$.ajax({
//some codes here
}).then(()=>{
alert("success");
});
}
}
});
当我按下按钮并调用函数时 addUser
我需要禁用按钮直到整个函数执行完毕
请帮忙..!
有两种方法可以做到这一点。
首先 - 手动维护状态
这意味着您的控制器上应该有一个 属性 并在任务为 运行
时将其设置为 true
export default Controller.extend({
actions: {
addUser: function(){
this.set('addUserRunning', true);
//some codes here
$.ajax({
//some codes here
}).then(()=>{
alert("success");
}).always(() => {
this.set('addUserRunning', false);
});
}
}
});
{{input type="email" value=email placeholder="email"}}
<button type="submit" disabled={{addUserRunning}} {{action "addUser"}}>Add</button>
第二种(本人推荐)——使用ember-并发
有一个名为 ember-concurrency 的插件。您需要浏览 docs 以了解如何使用它。您将使用任务代替操作,任务具有其状态的属性。
它将是这样的:
import { task } from 'ember-concurrency';
export default Controller.extend({
addUser: task(function* () {
//some codes here
yield $.ajax({
//some codes here
});
alert("success");
}).drop()
});
{{input type="email" value=email placeholder="email"}}
<button type="submit" disabled={{addUser.isRunning}} onclick={{perform addUser}}>Add</button>
template
{{input type="email" value=email placeholder="email"}}
<button {{action "addUser"}} type="submit">Add</button>
controller
export default Controller.extend({
actions: {
addUser: function(){
//some codes here
$.ajax({
//some codes here
}).then(()=>{
alert("success");
});
}
}
});
当我按下按钮并调用函数时 addUser
我需要禁用按钮直到整个函数执行完毕
请帮忙..!
有两种方法可以做到这一点。
首先 - 手动维护状态
这意味着您的控制器上应该有一个 属性 并在任务为 运行
时将其设置为true
export default Controller.extend({
actions: {
addUser: function(){
this.set('addUserRunning', true);
//some codes here
$.ajax({
//some codes here
}).then(()=>{
alert("success");
}).always(() => {
this.set('addUserRunning', false);
});
}
}
});
{{input type="email" value=email placeholder="email"}}
<button type="submit" disabled={{addUserRunning}} {{action "addUser"}}>Add</button>
第二种(本人推荐)——使用ember-并发
有一个名为 ember-concurrency 的插件。您需要浏览 docs 以了解如何使用它。您将使用任务代替操作,任务具有其状态的属性。
它将是这样的:
import { task } from 'ember-concurrency';
export default Controller.extend({
addUser: task(function* () {
//some codes here
yield $.ajax({
//some codes here
});
alert("success");
}).drop()
});
{{input type="email" value=email placeholder="email"}}
<button type="submit" disabled={{addUser.isRunning}} onclick={{perform addUser}}>Add</button>