【发布时间】:2015-01-09 09:07:39
【问题描述】:
我最近开始玩 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 计算的 observable 绑定,但每次 Query observable 更改和 Parameters observable 重新计算时,我都会丢失该计算项的所有状态。
我的意思是,如果我在 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 Observeable,用户在输入中键入的任何文本都将丢失。
我将如何解决这个问题?
【问题讨论】:
-
你能解释一下你的代码吗?参数数组是否发生了变化?如果它有什么变化呢?文本改变的面是计算函数的全部点。如果您不希望它发生变化,请不要将其设为计算值。
-
参数数组根据字符串
query变化。这被拆分为包含@@par1和@@par2的字符串数组。只要您更改字符串query中的文本,就会重新计算计算结果 -
那么是什么导致它发生变化?
-
在我的原始帖子中,我添加了一个绑定到
query的新文本区域。当这种情况发生变化时,parameters将被重新计算 -
如果文本区域发生变化,你希望发生什么?
标签: javascript knockout.js computed-observable