从ajax获取数据后,knockout不会更新html

时间:2013-05-29 08:06:47

标签: mvvm knockout.js

我将数据列表绑定到HTML,在每个列表中都有按钮,用于通过ajax获取详细信息。我想将回调数据绑定到模型的成员,在ajax回调之后,对象有数据,查看接收到的(ko.toJSON(d,null,2))对象。但HTML不会更新数据。 我不知道出了什么问题。请帮忙。谢谢。

HTML:

<section id="lists">
    <article class="todoList">
        <script type="text/html" id="person-template">
          <!--  <p>Credits: <span data-bind="text: message"></span></p>-->
            <p>xxx</p>
        </script>
        <ul data-bind="foreach: Items">
            <li>
                <div>
                    <span class="contentarea" data-bind="text: message"></span>
                    <button data-bind="click: $parent.evClick.bind($data)">Get details</button>
                    <button data-bind="click: detail">Ajax-Get</button>
                    <p>Credits: <span data-bind="text: d.message"></span></p>
                    <div style="display: block; width: 200px; height: 200px; border: solid 1px #ff6a00;" data-bind="text: ko.toJSON(d, null, 2)"></div>
                </div>

            </li>
        </ul>
    </article>
</section>

此处为完整代码。 http://jsfiddle.net/wuttipat/sc8fX/12/

3 个答案:

答案 0 :(得分:1)

你应该使用

<div data-bind="with: d">
    <span data-bind="text: message"></span>

因为data-bind =“with:d”在你使用data-bind =“text:message”时创建绑定上下文的范围,所以在这种情况下它将引用父绑定上下文意味着d。

此处的完整代码:http://jsfiddle.net/sc8fX/74/

答案 1 :(得分:0)

我想我已经弄清楚了(在清理了小提琴之后)。你有约束力是

text: d.message

但它应该是

text: message

因为d是绑定的上下文。所以你实际上试图绑定到不存在的d.d.message。用text: message替换它似乎有效,不是吗?

请参阅this updated fiddle

答案 2 :(得分:0)

我在淘汰赛文件中发现了这个问题。 http://knockoutjs.com/documentation/with-binding.html