奇怪的敲除绑定结果。给出结果,而点缀则没有

时间:2013-10-03 06:46:07

标签: knockout.js

给出以下代码。为什么将“test”替换为“”,而“test2”替换为“Travel Log”

    <h1 id="mainHeader" data-bind="text: $root.localization.frontHeader">test</h1>
    <div id="pages" data-bind="with: localization">
        <h1 class="frontHeader" data-bind="text: frontHeader">test2</h1>
    </div>

2 个答案:

答案 0 :(得分:1)

如果您的localization属性是ko.observable,那么如果您在表达式中使用它,则需要编写localization()

所以将绑定更改为:

<h1 id="mainHeader" data-bind="text: $root.localization().frontHeader">test</h1>
<div id="pages" data-bind="with: localization">
    <h1 class="frontHeader" data-bind="text: frontHeader">test2</h1>
</div>

但是在这种情况下,当localization属性为空时(with绑定为您执行此操作),您需要处理该情况。

为了使它适用于localization属性为空(或为null或未定义)的情况,则需要在绑定中添加额外的检查:

<h1 id="mainHeader" 
    data-bind="text: $root.localization() && $root.localization().frontHeader">
       test
</h1>
<div id="pages" data-bind="with: localization">
    <h1 class="frontHeader" data-bind="text: frontHeader">test2</h1>
</div>

演示JSFiddle

答案 1 :(得分:0)

"with"为您调用一个observable。 在表达式中,您需要自己调用它,因此您需要添加“()”。 data-bind="text: $root.localization().frontHeader"