最近 Knockout を使い始めたのですが、問題が発生しました。これをあらゆる方法でグーグル検索してみましたが、該当する結果が見つかりませんでした。
私がこのモデルを持っているとしましょう:
var model = new function () {
var that = this;
this.parameterRegex = ko.observable(/\@@{1}\w+/ig);
this.query = ko.observable('SELECT @@par1 from @@par2');
this.parameterNames = ko.computed(function () {
var allParameters = that.query().match(that.parameterRegex());
return (allParameters == undefined) ? [] : jQuery.unique(allParameters);
});
this.parameters = ko.computed(function () {
return ko.utils.arrayMap(that.parameterNames(), function (item) {
return {
Name: ko.observable(item),
Example: ko.observable()
}
});
});
};
HTMLでは、計算されたオブザーバブルにバインドしていますが、オブザーバブルが変更され、オブザーバブルが再計算Parameters
されるたびに、計算されたアイテムのすべての状態が失われます。Query
Parameters
これが意味することは、HTML で foreach をバインドしParameters
、その foreach に次のようないくつかの入力ボックスがある場合です。
<textarea name="query" class="form-control" data-bind="value: query, valueUpdate:'afterkeydown'" rows="10" style="margin-bottom:20px"></textarea>
<div data-bind="foreach: parameters">
<p data-bind="text: Name"></p>
<input type="text"></input>
</div>
ユーザーが入力に入力したテキストは、Computed Observable が再計算されると失われます。
これを解決するにはどうすればよいですか?