1

即使我在这个网站上看到很多类似的问题,也没有人回答我的问题。所以,请不要因为我再次讨论这个话题而生我的气。我在 durandal 项目中工作,我有 html 页面,后面有 javascript 文件。我在其中一个页面中有两个单选按钮。我希望他们的“检查”属性绑定到后面的视图模型中的变量。它看起来很简单……但事实并非如此!我尝试了两种方法,其中任何一种都没有成功:

第一种方式:在html中:

                             <input type="radio"
                                    name="radSearchBy"
                                    id="byNo"
                                    data-bind:"checked:isId" />

          in javascript:
                         isId: ko.observable(true)      

第二种方式:在html中:

          in javascript:
                         isId: ko.observable("checked")        

我知道有什么问题。即使我只是写

                           <input type="radio"
                                    name="radSearchBy"
                                    id="byNo"
                                    data-bind:"checked:true" />  

或者:

                     <input type="radio"
                                    name="radSearchBy"
                                    id="byNo"
                                    checked="checked" />     

它不起作用。只有我写的:

                     <input type="radio"
                                    name="radSearchBy"
                                    id="byNo"
                                    **checked** />    

是的,没有任何后续的“已检查”字样——它运作良好。

但这是个问题,因为我该怎么做 *绑定*

请尽快帮助我。

4

1 回答 1

0

不幸的是,答案有点复杂。单选按钮将您的 observable 的值与单选按钮的 value 属性相匹配。在布尔情况下,不可能简单地处理,因为 HTML 将返回 'true' 或 'false' 作为字符串,而不是布尔值。

该解决方案需要AFAIK 计算的 observables:

HTML

<input type="radio"
    name="radSearchBy"
    value="true"
    data-bind="checked: value" />True
<input type="radio"
    name="radSearchBy"
    value="false"
    data-bind="checked: value" />False

JavaScript

radSearchBy = ko.observable(true);
value = ko.computed({
    read: function() { return radSearchBy.toString(); },
    write: function(val) { radSearchBy(val === 'true'); }
});
于 2013-10-15T17:35:42.797 回答