2013-05-01 71 views
2

情态动词都转向了比我想象的还要困难:/迪朗达尔模态不会关闭

得到了模态装载了一个视图/视图模态正常,点击保存按钮保存的信息(我得到一个'从Q.js'应该是空的:[]',但显然这不是问题?)我遇到的问题可能与承诺有关,但如果是我无法找到它。

家长视图模型 -

​​

模态的视图模型 -

var cancel = function() { 
    this.modal.close(false); 
}; 

var save = function() { 
    isSaving(true); 
    setRevisionInfo(); 

    datacontext.saveChanges() 
     .then(alertMe) 
     .fail(initFailed) 
     .fin(complete); 

    function setRevisionInfo() { 
     templateForm().revisionLevel(1); 
     templateForm().createdById(shell.currentUser().id()); 
     templateForm().lastRevisedId(shell.currentUser().id()); 
     var nowDT = moment().format('LL'); 
     templateForm().lastRevisedDT(nowDT); 
     templateForm().createdDT(nowDT);    
    } 

    function alertMe() { 
     return console.log('done'); // <<< This is firing ok 
    } 

    function complete() { 
     isSaving(false); 
     this.modal.close(templateForm().id()); // <<< Breakpoint reaches here just fine 
    } 
}; 

如果我按了取消这势必回取消()将关闭就好按钮,如果我点击保存按钮save(),正确保存对象,并达到所有断点,但从不关闭。如果我保存后按取消它关闭就好了。我已经尝试在complete()函数中调用cancel()并且它到达语句,但是再次不关闭。有任何想法吗???

注意:我可以从模态中调用router.replaceLocation,它会改变视图,但模态会持续到下一个视图。

编辑:我增加了一个按钮,“关闭”,直到isSaving结束,hasChanges是假的,让我关闭它,一切就好了被禁用的,但不应该是必要的,对不对?

+0

你确定''this'在'complete()'仍然是你的vm上下文吗?尝试'var self = this;'在save()和complete()'self.modal.close(...)的顶部'' – RainerAtSpirit 2013-05-01 18:17:13

+0

就是这样。如果你能做出这个答案,我会接受谢谢Rainer。 – 2013-05-01 18:33:02

回答

4

每请求:

你肯定thiscomplete()仍然是你的VM上下文?尝试var self=this;在save()和complete()的顶部self.modal.close(...)

+0

这是解决方案。我试图从一个变量内的一个函数内调用它,即使它没有问题但没有告诉模态关闭。 – 2013-05-01 20:44:47