我正在使用最新的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个多小时,有人可以帮助我做错了吗?
感谢。
答案 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,但您的标记仍然与旧的标记绑定 - 它永远不会再次更新。