我有以下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
答案 0 :(得分:2)
这是因为你期望从函数返回一个数组 - 这就是.map
给你的。当你返回一个字符串时,knockout会使用foreach
:
data-bind="foreach: propertyView"
您只需要将默认返回值包装在数组中:
else return ["TBD"];
答案 1 :(得分:1)
尝试返回["TBD"]
而不是"TBD"
。字符串可以转换为字符数组,因此请指定包含单个字符串的数组