activationData没有在durandal传递

时间:2014-07-30 14:20:16

标签: knockout.js durandal hottowel

我正在使用durandal 1.1版。从compose绑定我通过activationData传递一些额外的参数。但是,子视图模型没有获得价值。它始终在activate方法中以未定义的形式接收。

<div data-bind="compose: {
                        model: 'testmodel',
                        activationData: {data : 10},
                            activate: true

                        }">

</div>

activate方法如下:

define(['durandal/app', 'durandal/system', 'durandal/plugins/router', 'services/logger', 'services/datacontext', 'config'], function (app, system, router, logger, Datacontext, config) {

var testmodel= function () {

    var vm = this;

    vm.activate = function (activationData) {
        alert(activationData);
        logger.log('View Activated',
               null, 'test', true);
    };
 };
 return testmodel;

});

还将激活添加到原型,但这也不起作用:

 define(['durandal/app', 'durandal/system', 'durandal/plugins/router', 'services/logger', 'services/datacontext', 'config'], function (app, system, router, logger, Datacontext, config) {

var testmodel= function () {

    var vm = this;
};
testmodel.prototype.activate = function (activationData) {
        alert(activationData);
        logger.log('View Activated',
               null, 'test', true);
};

 return testmodel;

});

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。我正在使用durandal 1.1版本。 composition.js 文件中有一个 tryActivate 函数,该函数调用函数,如下所示:

function tryActivate(settings, successCallback) {
    if (shouldPerformActivation(settings)) {
        viewModel.activator().activateItem(settings.model).then(function (success) {
            if (success) {
                successCallback();
            }
        });
    } else {
        successCallback();
    }
}

如上所示,只有viewmodel参数传递给activateItem。我还从那里传递了activationData参数,如下所示:

viewModel.activator().activateItem(settings.model,settings.activationData).then(function (success) {
            if (success) {
                successCallback();
            }
        });

现在,问题中看到的testmodel中的activate方法在activationData参数中得到值10。