我正在使用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;
});
答案 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。