我有以下数组,使用map
和敲除的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
覆盖单个对象,但是当它们像我这样获得自动映射时会怎样?我不知道该如何实现。提前致谢。 最佳答案
覆盖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">
计算可观察值的另一个优点是,如果您从
Products
添加或删除项目(应为observableArray
),则文本将更新。关于javascript - 覆盖数组内对象的toString,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35152720/