2013-08-28 2 views
0
<div> 
<div data-bind="compose:'viewmodels/header'"></div> 
</div> 

Я использую Durandal Composition, как показано в приведенных выше строках кода. Можно ли передать некоторые дополнительные параметры в мою модель просмотра при использовании композиции? Например, параметры durandal/app, durandal/viewLocator, 'durandal/system', которые обычно передаются в файле main.js?Durandal Composition

ответ

2

Да, вы можете пройти activationData как:

compose: { 
           model:'yourModel', 
           view: 'yourView', 
           activationData: [param1, param2], 
           activate: true } 
+0

Как мы можем получить доступ к переданному параметру в методе активации? – user2585299

+0

like {activate: function (param1, param2) {console.log ([param1, param2])}} –

+0

Да, я пробовал это раньше, но я продолжаю получать значение как неопределенное в функции активации, даже когда я пытаюсь пройти постоянное значение, например 10. – user2585299

0

Я не верю, что вы можете передать массив в качестве ActivationData. Но вы можете передать массив внутри объекта JavaScript. Кажется, я вспоминаю кое-что об этом.

0

В durandal версии 1.1 активацияДата не передается при вызове viewModel.activator(). ActivateItem() в методе tryActivate в compos.js. Я передал его в явном виде, чтобы получить значение activationData в ViewModel, как показано ниже:

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(); 
      } 
     });