用于简单对象的敲除绑定不起作用

时间:2014-04-02 16:48:20

标签: javascript knockout.js

我可以为数组或简单对象进行淘汰工作,但不能用于简单的json对象。 有人可以提供指针plz。

http://jsfiddle.net/aECM9/

HTML:

<table>
    <tbody>
        <tr><td>customer Number: </td><td data-bind="text: customerData().reference"></td></tr>
        <tr><td>customer Name: </td><td data-bind="text: customerData().name"></td></tr>
        <tr><td>customer Manager Code: </td><td data-bind="text: customerData().managerCode"></td></tr>
    </tbody>        
</table>   

的javascript:

        var viewModel = {
            customerData: ko.observable()
        };

        ko.applyBindings(viewModel);

        viewModel.customerData({
            reference: 123,
            name: "bob",
            managerCode: 321
        });

1 个答案:

答案 0 :(得分:4)

看看控制台。当您致电applyBindings时,它会抛出错误,因为它会尝试访问customerData().reference,但此时customerData()未定义。将.applyBindings移到您指定customerData值的位置下方。

请参阅:http://jsfiddle.net/aECM9/2/

另一个替代方法是使用if绑定来阻止knockout尝试绑定customerData()上的属性,然后才能获得值:

 <tbody data-bind="if: customerData()">

如果</tbody>是假的,那么在此之后,对于结束customerData()标记的任何内容都不会呈现。

http://jsfiddle.net/aECM9/3/

我使用了tbody,但您可以使用任何合适的父标记甚至虚拟标记:

<!-- ko if: customerData() -->