Knockout文本绑定到json对象

时间:2014-10-27 10:36:31

标签: knockout.js

我有一个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: 236578partner: <empty>。如果我发表评论data-bind="text: contractDetail().ContractNumber",则显示姓氏。

有关为何发生这种情况的任何帮助?我不想将contractDetail绑定到我的viewModel。我希望我的viewModel包含一个具有复杂合同细节的observable。

1 个答案:

答案 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 -->