Durandal Modal不会关闭

时间:2013-05-01 16:24:55

标签: modal-dialog breeze durandal q

模态变得比我想象的更难:/

让模态正确加载视图/视图模式,单击保存按钮保存信息(我确实从Q.js得到'应该为空:[]',但显然这不是问题?)我遇到的问题可能与承诺有关,但如果是,我找不到它。

家长的观点模型 -

var createNew = function () {
    app.showModal(tfcreate).then(function (modalResult) {
        if (!modalResult) { return false; }

        var templateId = modalResult;
        router.replaceLocation('#/templateformedit/' + templateId);
    });
};

模态的视图模型 -

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 
    }
};

如果我按下取消按钮,它被绑定回取消()它关闭就好了,如果我点击保存按钮它会点击保存(),正确保存对象,并到达所有断点但从不关闭。如果我保存后按下取消它再次关闭就好了。我试过在complete()函数期间调用cancel()并且它到达语句,但是再次没有关闭。任何想法???

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

编辑:我添加了一个禁用的“关闭”按钮,直到isSaving完成并且hasChanges为false并且允许我关闭它并且一切都很好,但这不是必需的,对吧?

1 个答案:

答案 0 :(得分:4)

按要求:

您确定this中的complete()仍然是您的虚拟机环境吗?尝试在save()和complete()var self=this;

顶部的self.modal.close(...)