我有以下数组,使用map
和knockout fromJS
进行初始化,如下所示:
self.loadProducts = function (applyBindings) {
$.ajax({
type: "GET",
url: urlGetProducts,
success: function (data) {
self.Products($.map(data[0].Value, function (item) { return ko.mapping.fromJS(item) }));
},
});
};
现在每个产品都包含一个名为Tags
的属性,我绑定在span
上:
<tbody data-bind="foreach: Products">
<tr role="row">
<td><span data-bind="text: Tags"></span></td>
</tr>
</tbody>
结果是span
将包含文本Tags
'toString()
,因为它是一个数组,默认情况下,toString
函数显示分隔的项目用逗号(,
)。我想要的是覆盖这个方法,并用空格+逗号正确显示它们。
在文档之后,我发现你可以使用Obj.prototype.toString
覆盖单个对象,但是当他们像我的情况一样自动映射时会怎样?我不知道如何实现这一目标。提前谢谢。
答案 0 :(得分:2)
覆盖toString
不是我的方式。
我实现了一个返回所需字符串的computed observable。
即你的ViewModel:
self.TagsText = ko.computedd(function() {
// compose text with the contents of the array
return text;
}, self);
然后,更改你的html以将文本绑定到这个新的计算:
<span data-bind="text: TagsText">
计算的observable的另一个优点是,如果您添加或删除Products
中的项目(该项目为observableArray
),则文本将更新。