2015-03-25 3 views
1

(новичок в отдельных приложениях страниц и нокаута, но я знаком с концепцией MVVM в WPF/Silverlight.)Как получить ссылку на ViewModel

У меня есть простой ViewModel со свойством называется selectedPayPeriodId который связан с выпадающий список с помощью нокаута. Это работает.

<select data-bind="options: SelectList, optionsCaption: 'Choose...', optionsText: 'Text', optionsValue: 'Value', value: selectedPayPeriodId"></select> 
       <input id="btnRunReport" type="button" class="btn btn-default" value="Run Report" onclick="doTest()" /> 
       <p>Selected Pay Period Id:<span data-bind="text: selectedPayPeriodId"></span></p> 

Теперь мне нужно получить значение viewModel.selectedPayPeiriodId из яваскрипта функции, так что я могу использовать его в вызов Ajax получить JSON от сервера.

Это то, что я пытаюсь сделать:

var doTest = function() { 
    //How to get reference to viewModel? 
    alert(viewModel.selectedPayPeriodId); //Error: viewModel is undefined. 
} 

ответ

2

Поместите doTest в вашей модели представления и затем привязать к нему с помощью data-bind: "click: doTest". http://knockoutjs.com/documentation/click-binding.html

function myViewModel() { 
     var self = this; 
     this.selectedPayPeriodId = ko.observable(); 

     this.doTest = function() { 
      alert(self.selectedPayPeriodId()); 
     }; 
} 

и в HTML:

<input type="button" data-bind="click: doTest"/> 
+0

Это работает. Тем не менее, я запускаю doTest(), когда первая страница загружается. Если я затем нажму кнопку, событие просто прекратится. Любая идея, почему он может выстрелить рано? –

+1

Попробуйте следующее: click: function (data, event) {$ root.doTest(); } –

+1

И попробуйте эту ссылку: http://stackoverflow.com/questions/9891282/knockoutjs-bindings-with-parameters-triggered-on-load –