我有以下数组,使用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/

10-15 11:04