KnockoutJS - 修剪字符串数组上的空格

时间:2013-01-03 00:57:23

标签: javascript jquery knockout.js

我有一个简单的情况,我想接受一个文本数组,所以我让用户输入用逗号分隔的数据,在我的KO视图模型中,我使用ko.computed来解析它。代码如下所示。 (主要感谢RPN向我展示这个技巧)

查看模型

var ViewModel = function() {
    this.values = ko.observableArray(["test1", "test2", "test3", "test4"]);

    this.computedJoinedValues = ko.computed({
        read: function() {
            return this.values().join(",");
        },
        write: function(newValue) {
            this.values(newValue.split(","));   
        },
        owner: this
    });
};

ko.applyBindings(new ViewModel());

HTML

<input data-bind="value: computedJoinedValues" />


<hr/>
<ul data-bind="foreach: values">
    <li data-bind="text: $data"></li>
</ul>

这很有效 - 但是我遇到了空白问题而且我有一点脑断裂。我想删除每个条目的尾随空格,因为我最终得到了像tag1, tag2这样的结果,它实际上被序列化为[ "tag1", " tag2" ] - 所以我认为适当的地方是{{1功能,所以我尝试了这个......

write

但我仍然在数组中获得空格。谁能确定我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您使用jQuery,以下代码将帮助您:

write: function(newValue) {
    this.values($.map(newValue.split(","), $.trim)); 
}

答案 1 :(得分:0)

你需要从字符串内部去掉空格 - trim()只是从字符串的开头和结尾剥去它:

write: function(newValue) {
  this.values(newValue.replace(/\s/g, '').split(","));
}