我有一个ViewModel,里面有一个可观察的。每次我点击一个按钮,我都会用ajax填充这个observ:
$.ajax({
url: '/Contracts/Details/' + id,
dataType: 'json',
type: 'GET',
success: function (data) {
self.showContractDetail(true);
self.contractDetail(data.contract);
alert(self.contractDetail().Partner.Surname);
}
});
警报显示正确的值。但在我的HTML中,我有:
<h2>contract number <span data-bind="text: contractDetail.ContractNumber"></span></h2>
<h4>partner: <span data-bind="text: contractDetail.Partner.Surname"></span></h4>
但没有显示任何内容。如果我用text: contractDetail.
替换text: contractDetail().
,则仅显示第一个绑定。它是:它显示contract number: 236578
和partner: <empty>
。如果我发表评论data-bind="text: contractDetail().ContractNumber"
,则显示姓氏。
有关为何发生这种情况的任何帮助?我不想将contractDetail绑定到我的viewModel。我希望我的viewModel包含一个具有复杂合同细节的observable。
答案 0 :(得分:1)
你能让JSFiddle显示问题吗?我现在正在回答这个问题,因为我要说的是评论太多了,但如果我无法重现这个问题,我无法确认它是否有任何修复。
您应该将text: contractDetail.
更改为text: contractDetail().
,这是正确的。执行此操作时,控制台中是否显示任何错误?
另一种方法是将这两行html包装在虚拟绑定中:
<!-- ko with: contractDetail -->
<h2>contract number <span data-bind="text: ContractNumber"></span></h2>
<h4>partner: <span data-bind="text: Partner.Surname"></span></h4>
<!-- /ko -->