【问题标题】:How to get reference to viewmodel如何获取对视图模型的引用
【发布时间】:2015-05-29 04:17:27
【问题描述】:

(刚接触单页应用和淘汰赛,但熟悉 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>

现在我需要从 javascript 函数中获取 viewModel.selectedPayPeiriodId 的值,以便在 ajax 调用中使用它从服务器获取 json。

这就是我想要做的:

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

【问题讨论】:

    标签: knockout.js single-page-application


    【解决方案1】:

    将 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"/>
    

    【讨论】:

    • 这行得通。但是,当页面第一次加载时,我确实会触发 doTest() 。如果我然后单击该按钮,则该事件会很好地触发。知道为什么它可能会提前触发吗?
    • 试试这个:点击:function(data,event) { $root.doTest(); }
    • 另一种解决方案是:click: doTest 而不是 `doTest()~ 我更新了答案以反映这一点。
    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多