我有一个模态对话框,其实现类似于食谱中描述的内容:http://emberjs.com/guides/cookbook/user_interface_and_interaction/using_modal_dialogs/
我可以通过模板中的事件关闭模态而不会出现任何问题。但是,我已经为特定模态实现了一个控制器,它使用通过模态输入的数据创建一个新模型。现在我想在模型(控制器完成之后)创建后关闭对话框。我尝试了各种方法从控制器向模态发送动作,但到目前为止没有任何工作。所以,有两个问题:
如何在控制器中的操作完成后关闭模态?
export default ModalController.extend({
actions: {
create: function() {
// do some stuff
var newModel = this.store.createRecord('newModel', {
name: name
});
newModel.save()
// close modal
// ... but how?
}
由于这依赖于承诺,我认为这会在创建承诺后关闭模式。当服务器的实际响应到达并且一切正常时,如何关闭模式?
答案 0 :(得分:1)
假设您正在为模型使用Ember Data:
export default ModalController.extend({
actions: {
create: function() {
// do some stuff
var newModel = this.store.createRecord('newModel', {
name: name
});
newModel.save().then(function success() {
//success message and close modal
}).catch(function failure() {
//error message and close modal
});
}
这里的基本想法是为success
注册failure
和Model.save()
个回调,
并关闭那些回调中的模态对话框。
关于如何实际关闭模态对话框,假设你已经实现了
同一closeModal
的操作哈希中的Controller
,
您需要通过this.send()
newModel.save().then(function success() {
//success message and close modal
this.send('closeModal');
}.bind(this)) /* ... */
请务必在回调函数上调用.bind()
,以便this
指向您期望的内容(控制器)。
我记得asking a question about just this a while back。
HTH!