<div>
<div data-bind="compose:'viewmodels/header'"></div>
</div>
我正在使用 Durandal 组合,如上面的代码行所示。是否可以在使用组合时将一些额外的参数传递给我的视图模型?例如,通常在 main.js 文件中传递的 'durandal/app'、'durandal/viewLocator'、'durandal/system' 参数?
<div>
<div data-bind="compose:'viewmodels/header'"></div>
</div>
我正在使用 Durandal 组合,如上面的代码行所示。是否可以在使用组合时将一些额外的参数传递给我的视图模型?例如,通常在 main.js 文件中传递的 'durandal/app'、'durandal/viewLocator'、'durandal/system' 参数?
Yes you can pass activationData like:
compose: {
model:'yourModel',
view: 'yourView',
activationData: [param1, param2],
activate: true }
I don't believe you can pass an array as ActivationData. But you can pass an array inside of a JavaScript object. I seem to recall reading something about that somewhere.
在 durandal 版本 1.1 中,在 composition.js 中的 tryActivate 方法中调用 viewModel.activator().activateItem() 时不会传递activationData。我显式传递它以获取 viewmodel 中activationData 的值,如下所示:
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();
}
});