单选按钮检查绑定html5,durandal

时间:2013-10-15 14:50:30

标签: javascript html5 knockout.js durandal

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

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

是的,没有任何内容的“已检查”字词效果很好。

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

请尽快帮助我。

1 个答案:

答案 0 :(得分: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'); }
});