【问题标题】:activationData not getting passed in durandal激活数据未在 durandal 中传递
【发布时间】:2014-09-22 05:45:10
【问题描述】:

我使用的是 durandal 1.1 版。从撰写绑定我通过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;

});

【问题讨论】:

  • 是的,它在 2.1 中可用。 Reference.
  • @Brett 在 durandal 1.1 中,当我看到 viewModel.js 文件时,我看到activationData 被传递给了 activate 方法。这意味着它在 1.1 中可用?我说的对吗?
  • 只是猜测,但我认为您使用它的方式是错误的。可能是它不理解{ data: 10 } 的字面意思。您是否尝试过 10 之类的值或尝试在表达式周围加上单引号?
  • @Brett 是的,我尝试传递 activationData : [10] / activationData : 10。这没有帮助。
  • @user2585299 vm 来自哪里?应该是vm.prototype.activate 吗?或者,如果这是一个单例模块,则需要导出 activate

标签: knockout.js durandal hottowel


【解决方案1】:

我解决了这个问题。我正在使用 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。

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 1970-01-01
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多