Knockout.js 如何获取对viewmodel的引用

Knockout.js 如何获取对viewmodel的引用,knockout.js,single-page-application,Knockout.js,Single Page Application,(我不熟悉单页应用和淘汰版,但熟悉WPF/Silverlight中的MVVM概念。) 我有一个简单的viewModel,它有一个名为selectedPayPeriodId的属性,该属性使用Knockout绑定到下拉列表。这很有效 <select data-bind="options: SelectList, optionsCaption: 'Choose...', optionsText: 'Text', optionsValue: 'Value', value: selectedPay

(我不熟悉单页应用和淘汰版,但熟悉WPF/Silverlight中的MVVM概念。)

我有一个简单的viewModel,它有一个名为selectedPayPeriodId的属性,该属性使用Knockout绑定到下拉列表。这很有效

 <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>

在视图模型中放置doTest,然后使用
数据绑定:“单击:doTest”
绑定到它

和HTML格式:

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


这很有效。但是,当页面第一次加载时,我确实会触发doTest()。如果单击该按钮,事件将正常触发。知道它为什么会提前触发吗?试试这个:单击:函数(数据,事件){$root.doTest();}并尝试这个链接:另一个解决方案是:
click:doTest
而不是'doTest()。~我更新了答案以反映这一点。
function myViewModel() {
        var self = this;
        this.selectedPayPeriodId = ko.observable();

        this.doTest = function() {
            alert(self.selectedPayPeriodId());
        };
}
<input type="button" data-bind="click: doTest"/>