【问题标题】:inline with binding with an observable array内联与可观察数组的绑定
【发布时间】:2014-03-02 23:57:25
【问题描述】:

我有一个模型属性定义如下:

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/

【问题讨论】:

    标签: javascript arrays data-binding knockout.js


    【解决方案1】:

    您可以在不使用 with 绑定的情况下解决此问题

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

    请注意,您需要在map 之后使用() 来获取其值,并使用map() &amp;&amp; 确保除非将map 设置为某个值,否则不会计算表达式。

    演示JSFiddle.

    当然,使用with 绑定是处理这些用例的更优雅和正确的解决方案,而且您几乎成功了,只是忘记了内部绑定表达式中的text

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

    演示JSFiddle.

    【讨论】:

    • 我想知道为什么当您提供这样的数据绑定时,Knockout 不会引发异常。找到问题并修复丢失的“文本:”会容易得多
    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 2017-07-26
    • 2014-06-23
    • 1970-01-01
    • 2015-11-30
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多