1

有没有人经历过这个,或者能够指出我正确的方向:

我正在使用来自 John Papa 的热毛巾 SPA 模板的代码。尝试取消更改后,我的模式对话框不会关闭,使用:

  var canDeactivate = function () {
    if (isDeleting()) { return false; }

    if (hasChanges()) {
        var title = 'Do you want to leave "' +
            projectDetails()[0].title() + '" ?';
        var msg = 'Navigate away and cancel your changes?';

        return app.showMessage(title, msg, ['Yes', 'No'])
        .then(confirm);

        function confirm(selectedOption)
        {
            if (selectedOption === 'Yes') {
                cancel();
            }

            return selectedOption;
        }

    }
    return true;
};

我得到:

TypeError: activator.deactivateItem(...).then 不是函数 [Break On This Error]

以及对 Durandal modalDialog.js 的第 72 行的引用:

activator.deactivateItem(instance, true).then(function (closeSuccess) {.....

4

2 回答 2

1

事实证明,我从 HotTowel main.js 的模板中获得了一些额外的代码:

// Q shim
    system.defer = function (action) {
    var deferred = Q.defer();
    action.call(deferred, deferred);
    var promise = deferred.promise;
    deferred.promise = function () {
        return promise;
    };

    return deferred;
    };

这个垫片导致了错误 - 不知道为什么,但希望这可以帮助某人......

于 2013-06-03T12:12:56.460 回答
0

canDeactivate()似乎返回布尔值或承诺。

通常你会期望这样的函数总是返回一个承诺或总是返回一个布尔值,否则调用函数将难以处理返回值。

我希望您的调用函数需要一个布尔值或一个承诺,并在另一个被传递时抛出一个错误。

于 2013-06-02T00:02:47.270 回答