简体   繁体   English

KnockOut.js文本绑定客户端更改未更新ViewModel

[英]KnockOut.js text binding client side change not updating viewmodel

I have two dropdowns upon change will update a label. 我在更改后有两个下拉菜单会更新标签。 the label is bound to an observably field in my viewModel using text binding. 使用文本绑定将标签绑定到我的viewModel中的一个可观察字段。 However, when the label text is changed, the viewModel submitted to the server is not updated. 但是,更改标签文本时,不会更新提交给服务器的viewModel。 I couldn't find related information from knockout website. 我无法从淘汰赛网站上找到相关信息。 Am I missing something? 我想念什么吗?

HTML 的HTML

       <select class="string-match-dropdown">
            <option value="*">contains</option>
            <option value="^">starts with</option>
            <option value="$">ends with</option>
            <option value="=">is exactly</option>
            <option value="@@">has value</option>
        </select>
        <select class="date-money-match-dropdown">
            <option value="eq">=</option>
            <option value="noteq"><></option>
            <option value="gt">></option>
            <option value="gteq">>=</option>
            <option value="lt"><</option>
            <option value="lteq">&lt;=</option>
        </select>
        <label class="match-label" data-bind='html: qualifier'></label>

JS JS

$('.date-money-match-dropdown').live('change', function () {
    $(this).parent().find('.match-label').html($(this).find('option:selected').text());
});

$('.string-match-dropdown').live('change', function () {
    $(this).parent().find('.match-label').html($(this).find('option:selected').text());
});

For this scenario you don't need to use jquery at all. 对于这种情况,您根本不需要使用jquery。

Because you already have an observable on your viewmodel qualifier you just need to use the value binding on your select s and Knockout will do the change handling for you: 因为您的viewmodel qualifier上已经有一个可观察的对象,所以只需要在select上使用value绑定 ,并且Knockout将为您进行更改处理:

<select class="string-match-dropdown" data-bind='value: qualifier'>
    <option value="*">contains</option>
    <option value="^">starts with</option>
    <option value="$">ends with</option>
    <option value="=">is exactly</option>
    <option value="@@">has value</option>
</select>
<select class="date-money-match-dropdown" data-bind='value: qualifier'>
    <option value="eq">=</option>
    <option value="noteq"><></option>
    <option value="gt">></option>
    <option value="gteq">>=</option>
    <option value="lt"><</option>
    <option value="lteq">&lt;=</option>
</select>
<label class="match-label" data-bind='html: qualifier'></label>

Demo JSFiddle. 演示JSFiddle。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM