0

テキストの配列を受け入れたいという単純な状況があるので、ユーザーにコンマで区切ってデータを入力させ、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" ]を行うのに適切な場所は関数だと思ったwriteので、これを試しました...

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

しかし、私はまだ配列にスペースを取得しています。誰かが私が間違っていることを特定できますか?

4

2 に答える 2

1

jQueryを使用する場合は、次のコードが役立ちます。

write: function(newValue) {
    this.values($.map(newValue.split(","), $.trim)); 
}
于 2013-01-03T01:03:36.350 に答える
0

文字列の内側から空白を削除する必要があります-trim()は、文字列の最初と最後から空白を削除するだけです。

write: function(newValue) {
  this.values(newValue.replace(/\s/g, '').split(","));
}
于 2013-01-03T01:05:03.967 に答える