Javascript 在不重置对象的情况下重新计算计算的可观测值
我最近开始玩淘汰赛,我遇到了一个问题。我试过用各种方式在谷歌上搜索,但找不到任何适用的结果 假设我有这个模型:Javascript 在不重置对象的情况下重新计算计算的可观测值,javascript,knockout.js,computed-observable,Javascript,Knockout.js,Computed Observable,我最近开始玩淘汰赛,我遇到了一个问题。我试过用各种方式在谷歌上搜索,但找不到任何适用的结果 假设我有这个模型: var model = new function () { var that = this; this.parameterRegex = ko.observable(/\@@{1}\w+/ig); this.query = ko.observable('SELECT @@par1 from @@par2'); this.parameterNames =
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中,我绑定了参数
计算的可观测值,但每次查询
可观测值发生变化,并且参数
可观测值重新计算时,我都会丢失该计算中项目的所有状态
我的意思是,如果我在HTML中用参数
绑定一个foreach,并且在该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>
一旦重新计算计算的可观测性,用户在输入中键入的任何文本都将丢失
如何解决这个问题?解决方案是保留一个单独的数组,其中包含对象,然后如果对象存在于数组中,则重新使用它们,而不是每次都重新创建它们
var parameters = [];
this.parameters = ko.computed(function () {
var newParams = [];
for (var i = 0; i < that.parameterNames().length; i++) {
var name = that.parameterNames()[i];
var result = $.grep(parameters, function(p){ return p.Name() == name; });
var param;
if (result.length === 0) {
param = {
Name: ko.observable(name),
Example: ko.observable()
};
}
else {
param = result[0];
}
newParams.push(param);
}
parameters = newParams;
return newParams;
});
var参数=[];
this.parameters=ko.computed(函数(){
var newParams=[];
对于(var i=0;i
您是否可以解释您的代码。数组中的参数是否发生了变化?如果真的发生了什么变化?文本更改的面是计算函数的整个点。如果不希望更改,则不要将其设置为计算。参数数组将根据字符串
查询
进行更改。这被分成一个字符串数组,其中包含@@par1
和@@par2
。一旦您更改字符串查询
中的文本,计算出的文本将被重新计算,那么是什么导致它发生更改?在我的原始帖子中,我添加了一个绑定到查询
的新文本区域。当此更改时,将重新计算参数
。如果文本区域更改,您希望发生什么?这是否解决了您的问题?如果是,请选择我的答案作为解决方案。