Knockout Mapping数据绑定无法正常工作

时间:2015-02-10 10:17:30

标签: knockout.js

我正在使用最新的KO Mapping Plugin。我们的想法是应该使用从Ajax Call中检索的JSON数据填充Details部分。

var supervisorVM = {
        supervisor: ko.observable()
    };

-----------code to call custom data service which returns JSON---
     if (supervisorDetails) {
        $('#Detail').show();
        supervisorVM.supervisor = ko.mapping.fromJS(supervisorDetails);
        ko.applyBindings(supervisorVM, document.getElementById("Detail"));
    }



<div id="Detail" class="side-widget" style="display:none">
    <h2>Details</h2>
    <strong>
        Supervisor<br>
        <span data-bind="text: supervisor.FullName"></span><br/>
    </strong>
    <span data-bind="text: supervisor.PhoneNumber"></span><br/>
    <a data-bind="text: supervisor.Email, attr: { href : 'mailto:'+supervisor.Email() }"></a>
</div>

每次我运行详细信息部分都不会填充主管详细信息,即全名和电话号码。

我调试并确认已填充supervisorVM.supervisor但数据绑定不起作用。

也尝试下面没有运气:

  

supervisorVM.supervisor(ko.mapping.fromJS(supervisorDetails));

我已经花了2个多小时,有人可以帮助我做错了吗?

感谢。

1 个答案:

答案 0 :(得分:1)

supervisor.Fullname之类的绑定定义不正确 - 您正在寻找一个属性&#39; Fullname&#39;在可观察功能上。它应该是supervisor().Fullname

尝试在with: supervisor绑定中包装字段。只要您的AJAX调用没有返回并将内容添加到supervisor,这就会产生很好的副作用,即字段不会呈现:

<div id="Detail" class="side-widget" style="display:none" data-bind="with: supervisor">
    <h2>Details</h2>
    <strong>
        Supervisor<br>
        <span data-bind="text: FullName"></span><br/>
    </strong>
    <span data-bind="text: PhoneNumber"></span><br/>
    <a data-bind="text: Email, attr: { href : 'mailto:' + Email() }"></a>
</div>

此外,请不要像在此处那样替换observable:

supervisorVM.supervisor = ko.mapping.fromJS(supervisorDetails);

而是替换他们的内容

supervisorVM.supervisor( ko.mapping.fromJS(supervisorDetails) );

您的标记已经绑定了您使用supervisor: ko.observable()指定的旧观察点。您可以使用新的observable替换该observable,但您的标记仍然与旧的标记绑定 - 它永远不会再次更新。