2014-02-06 239 views
1

结合我有一个模型属性定义如下:直列与可观察到的阵列

function Field(name, size, type){ 
    this.name = ko.observable(name); 
    this.size = ko.observable(size); 
    this.type = ko.observable(type); 
    this.map = ko.observable(); 
} 

我有定义,其是上述目的的阵列可观察到的阵列(fields)。在UI交互上,Field对象的map属性将与另一个对象关联。它是具有属性headerNameindexHeader对象。

我试图绑定字段如下:

<ul data-bind="foreach: fields"> 
    <li class="form-inline"> 
     <span data-bind="text:name"></span> -> 
     <span data-bind="text: map.headerName"></span> 
    </li> 
</ul> 

但它是不成功的:http://jsfiddle.net/deostroll/sENA8/2/

试了一下如下:

<ul data-bind="foreach: fields"> 
    <li class="form-inline"> 
     <span data-bind="text:name"></span> -> 
     <span data-bind="with: map"><span data-bind="headerName"></span></span> 
    </li> 
</ul> 

还不行。 http://jsfiddle.net/deostroll/sENA8/3/

回答

2

就可以解决这个不使用with结合

<span data-bind="text: map() && map().headerName"></span> 

注意你所需要的()map后能得到它的价值和使用map() &&确保该表达式将无法进行评估,除非map是设置为某个值。

演示JSFiddle

使用with结合更优雅,妥善解决处理这些用例。当然,你已经几乎做到了,你刚才忘了text在你内心的绑定表达式:

<span data-bind="with: map"><span data-bind="text: headerName"></span></span> 

演示JSFiddle

+0

我想知道为什么Knockout在您提供数据绑定时不会抛出异常。找到问题并修复缺失的“文本”会容易得多。 – Anders