为什么KO财产会分裂?

时间:2016-10-31 09:45:43

标签: knockout.js

我有以下KO属性:

this.propertyView = ko.pureComputed(function () {
    if (!$.isEmptyObject(this.properties())) {
        return this.properties().map(function (prop) {
            var singleProp = '';
            for (var p in prop) {
                if (prop[p]) {
                    singleProp += prop[p] + ', ';
                }
            }
            return singleProp.slice(0, -2);
        });
    }
    else return "TBD";
}, this);

HTML:

<span>PROPERTY</span>
<div data-bind="foreach: propertyView">
  <span data-bind="text: $data" class="fnt-normal"></span>
</div>

问题是:如果对象不是空的,它工作正常,但如果为空,它会将“TBD” - 每个字母换成新行。 例如:如果它不是空的,它看起来像那样:

  

test,23 st,NY

如果它是空的,我会以这种方式得到“TBD”:

  

Ť

     

     

d

2 个答案:

答案 0 :(得分:2)

这是因为你期望从函数返回一个数组 - 这就是.map给你的。当你返回一个字符串时,knockout会使用foreach

遍历每个字符
data-bind="foreach: propertyView"

您只需要将默认返回值包装在数组中:

else return ["TBD"];

答案 1 :(得分:1)

尝试返回["TBD"]而不是"TBD"。字符串可以转换为字符数组,因此请指定包含单个字符串的数组