Knockout Checkbox绑定到ajax检索值

时间:2013-08-05 20:06:51

标签: knockout.js

我是编程的新手,尤其是淘汰赛。我有一个正在填充foreach绑定的表。在这个表中,我有一个列,我想成为一个复选框,其检查值是从通过ajax检索的mysql数据库值填充的。我知道检查过的绑定应该能够取0或1并松散地转换为选中和取消选中。

http://knockoutjs.com/documentation/checked-binding.html

  

对于复选框,KO将设置要检查的元素   参数值为true,如果为false则取消选中。如果你给   一个实际上不是布尔值的值,它将被松散地解释。   这意味着非零数字和非空对象非空   字符串将全部解释为true,而零,null,   undefined,空字符串将被解释为false。

所以让我们说这是我的ko.observableArray命名部分:

{"id":"1","partdes":"asdf","partcost":"1.00","sellcost":"2.00","tax":"1"}

我的表中有这段代码:

<tbody data-bind="foreach: parts">
    <tr>
        <td data-bind="text: id"></td>
        <td data-bind="text: partdes"></td>
        <td data-bind="text: partcost"></td>
        <td data-bind="text: sellcost"></td>
        <td><input type="checkbox" data-bind="checked: tax" /></td>

          //And I added this line to get the actual value: 
        <td data-bind="text: tax"></td>
    </tr>
</tbody>

一切正常,但即使值为0,总是会检查复选框。为什么这不起作用?

4 个答案:

答案 0 :(得分:0)

  

非零数字和非空对象以及非空字符串都将是   解释为真

在您的情况下,"1""0"都是非空字符串,会转换为true
如果您的数字值为tax"tax": 1"tax": 0

,您的代码就可以使用

答案 1 :(得分:0)

我创建了jsfiddle,其中包含已检查绑定的示例。

self.parts.push(new part({id: 1, tax: 0}));    -- set as non checked
self.parts.push(new part({id: 2, tax: 1}));    -- set as checked
self.parts.push(new part({id: 3, tax: true})); -- set as checked

答案 2 :(得分:0)

Javascript有一种处理true / false的特殊方式:语句可以是“truthy”或“falsy”。 例如,“0”是“真实的”,但事实并非如此。 javascript中有两种比较运算符。如果要测试相等性,可以使用“==”或“===”(或“!=”和“!==”表示不相等)。最后一个意味着严格的平等。您可以使用以下代码对其进行测试:

var test = "1";
if(test) {
    alert("truthy");
}
if(test == true) {
    alert("truthy");
}
if(test === true) {
    alert("but not true!");
}

将显示前两个警报。最后一个不会。字符串是真实的(它既没有定义也没有空),但它并不严格等于真。

在你的情况下,Knockout测试“正常”平等(真实)。这意味着“0”或“1”字符串都是真实的。如果你的变量是纯整数,那么0将是假的并且严格地等于假,1将是真实的并且等于真。

所以你必须在你的JSON中使用布尔值或整数,这将起作用。

答案 3 :(得分:0)

试试这个

<td><input type="checkbox" data-bind="checked: (tax==0||!tax)?false:true" /></td>