更新:我在下面发布了我的代码解决方案作为答案,如果有人想查看 KnockoutJs 自定义绑定的完整(且相当简单)示例,这可能会有所帮助。
问题:
当我使用 jQuery 设置单选按钮的选中状态时……似乎我的 KnockoutJs 视图模型没有跟踪此更改!
场景:
我有多个大 DIV,每个 DIV 都包含一个单选按钮。(这使用户可以更轻松地通过单击更大的区域来单击单选按钮。)当用户单击 div 中的某个位置时,我想为他们检查单选按钮......这很好用。但是,当尝试从绑定到此单选按钮的 viewModel 属性中读取值时......它尚未更新。:-(
唯一一次更新viewModel是如果我直接单击div 内的单选按钮。如果我只是单击 div 内的某个位置(它执行我的 jQuery),那么....即使收音机明显被选中.... knockoutjs viewModel 属性尚未更新为新值。
问题: 有人可以告诉我如何使用 jQuery 更改单选按钮的选中状态,并让 KnockoutJs 可以很好地播放并进行更新吗?
代码如下,这里是 jsFiddle:http: //jsfiddle.net/CkEMA/67/
<script>
    $(document).ready(function ()
    {
        var self = this;
        function ViewModel()
        {
            this.HourlyOrSalary = ko.observable("");
        }
        viewModel = new ViewModel();
        ko.applyBindings(viewModel, document.getElementById('divKnockout'));
        // Click event for DIV around radio button
        $('.divRadioWrapper').click(function ()
        {
            var radio = $(this).find('input[type="radio"]');
            radio.prop('checked', true);
        });
        // Just for testing...
        $('#testButton').click(function ()
        {
            var viewModelVal = viewModel.HourlyOrSalary();
            alert('Value --> ' + viewModelVal);
        });
    });
</script>
<style>
    .divRadioWrapper {
        background-color: #dde9f5;   /*#d8f5f0;*/  /* #dcfbff; */
        width: 75px; 
        padding: 5px 10px; 
        border: 1px solid lightgray;
        cursor: pointer;
        margin-bottom: 10px;
    }
</style>
<div id="divKnockout">
    <div class="divRadioWrapper">
        <input type="radio" name="formType" value="hourly" data-bind="checked: HourlyOrSalary"
        />Hourly</div>
    <div class="divRadioWrapper">
        <input type="radio" name="formType" value="salary" data-bind="checked: HourlyOrSalary"
        />Salary</div>
    <br />
    <input type="button" id="testButton" value="Display viewModel data" />    
</div>