我有一个这种形式的嵌套JSON对象
var termValues=[
{
clause_title:"One",
clause_id:"One",
CM_terms: [
{ termName: 'CompanyName', type:"text", termValue:"CompanyName1", termId:'1' },
{ termName: 'Contract termValue', type:"number", termValue:"1234",termId:'2' },
{ termName: 'Contract End', type:"date", termValue:"2012-02-02", termId:'3' }
]
},
{
clause_title:"Two",
clause_id:"Two",
CM_terms: [
{ termName: 'CompanyName', type:"text", termValue:"CompanyName2", termId:'4' },
{ termName: 'Contract termValue', type:"number", termValue:"5678",termId:'5' },
{ termName: 'Contract End', type:"date", termValue:"2011-02-02", termId:'6' }
]
}
];
我以这种形式申请了绑定
function TestModel (termValues)
{
var self=this;
self.Clauses=ko.observableArray(termValues)
}
ko.applyBindings(new TestModel(termValues),$("#ctrTerms1")[0]);
HTML code:
<div data-bind="foreach: Clauses" id="ctrTerms1">
<div class="panel">
<div class="control-bar panel-heading">
<h4 class="panel-title" style="overflow:auto">
<a class="col-md-12 clref">
<span class="clause-title" title="Click to edit" data-bind="text: Clauses.clause_title"></span>
</a>
</h4>
</div>
<div>
<div class="panel-body">
<form class="form-horizontal" role="form" data-bind="foreach: CM_terms">
<div class="form-group" >
<label class="col-md-2 control-label" data-bind="text: termName">Title</label>
<div class="col-md-9">
<input type="text" class="form-control cttermValue" id="clauseTitle" data-bind="value: termValue">
</div>
</div>
</form>
</div>
</div>
</div>
</div>
现在的问题是,如果我有超过1个术语,那么CM_terms将以数组的形式存在,因此每个CM_terms都可以工作,但如果我只有1个CM_terms(单个对象),则敲除不能绑定为CM_term将不是数组。
var termValues=[
{
clause_title:"One",
clause_id:"One",
CM_terms:
{ termName: 'CompanyName', type:"text", termValue:"companyName1", termId:'1' }
];
我如何制作&#39; CM_term&#39;如果是单个对象,则转换为Array的值。 截至目前,我正在迭代termValues并将CM_terms设为Array,如果它不是数组,然后应用Bindings。
还有其他办法。
答案 0 :(得分:0)
如果您有单个对象,则将其推入阵列。在你的情况下,CM_terms总是应该是一个数组,无论它是单个对象还是多个对象。
var termValues=[
{
clause_title: "One",
clause_id: "One",
CM_terms: [
{
termName: 'CompanyName',
type: "text",
termValue: "Cordys",
termId: '1'
}
]
];
答案 1 :(得分:0)
这就是我们如何解决问题的方法。从其中一个堆叠流动的帖子中得到了线索(如果找到了增益则会发布)
我们可以使用data-bind =&#34; foreach:{data:$ data.CM_Terms}&#34;。即使CM_Terms不是数组
,我们也能得到理想的结果<div class="panel-body" data-bind="foreach: {data:$data.CM_terms}">