内联与可观察数组的绑定

时间:2014-02-06 06:59:04

标签: javascript arrays data-binding knockout.js

我的模型属性定义如下:

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属性将与另一个对象相关联。它是Header对象,其属性为headerNameindex

我正在尝试按如下方式绑定字段:

<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/

1 个答案:

答案 0 :(得分: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