Knockout.js 淘汰赛未得到更新
我在更新可观察的Array时遇到问题。我肯定错过了什么,但我所拥有的是: 我的主视图模型中存储了一个值列表,如下所示:Knockout.js 淘汰赛未得到更新,knockout.js,jqxwidgets,Knockout.js,Jqxwidgets,我在更新可观察的Array时遇到问题。我肯定错过了什么,但我所拥有的是: 我的主视图模型中存储了一个值列表,如下所示: function AppViewModel() { var self = this; self.q1 = ko.observable().extend({ number: true }); self.q2 = ko.observable().extend({ number: tru
function AppViewModel() {
var self = this;
self.q1 = ko.observable().extend({ number: true });
self.q2 = ko.observable().extend({ number: true });
self.q3 = ko.observable().extend({ number: true });
self.q4 = ko.observable().extend({ number: true });
self.q5 = ko.observable().extend({ number: true });
.
.
.
我有一个计算平均值的计算函数列表。我还有一个单独的视图模型,用于使用jqxWidgets创建图表。代码如下:
function ChartModel(scores) {
var self = this;
var cat;
self.scores = ko.observableArray(scores);
self.scores.push({ cat: "Re", score: vm.reAve() });
self.scores.push({ cat: "Da", score: vm.daAve() });
self.scores.push({ cat: "De", score: vm.deAve() });
self.scores.push({ cat: "Im", score: vm.imAve() });
self.scores.push({ cat: "Ps", score: vm.psAve() });
self.scores.push({ cat: "Overall", score: vm.reAve() });
//alert(self.scores()[0].score);
self.updateScores = function () {
var item = {};
item.cat = "Re";
item.score = vm.reAve();
self.scores.replace(self.scores()[0], item);
item.cat = "Da";
item.score = vm.daAve();
self.scores.replace(self.scores()[1], item);
item.cat = "De";
item.score = vm.deAve();
self.scores.replace(self.scores()[2], item);
item.cat = "Im";
item.score = vm.imAve();
self.scores.replace(self.scores()[3], item);
item.cat = "Ps";
item.score = vm.psAve();
self.scores.replace(self.scores()[4], item);
item.cat = "Overall";
item.score = vm.basAve();
self.scores.replace(self.scores()[5], item);
};
}
var vm = new AppViewModel();
var cm = new ChartModel(scores);
我在$document的末尾应用绑定。准备好了吗。。。块问题在于,调用updateScores函数时,分数永远不会更新:
<button id="btnLoad" data-bind="click: cm.updateScores">View Chart</button>
mdaVals是保存所有3个值的数组,mdaScore应该是获得的最大值。上面的代码有什么问题吗?如果希望在数组中某个对象的值发生更改时更新页面上的值,则需要将该对象上的每个值声明为可观察值
self.mdaVals = ko.observableArray([]);
self.mdaVals.push({ number: ko.observable(1), score: ko.observable(20)});
self.mdaVals()[0].number(2);
self.mdaVals()[0].score(10);
您是否尝试过使用数据绑定=单击:更新存储?您不能在视图中引用cm。我已经尝试过了,但我得到了一个未捕获的错误:无法解析绑定。消息:ReferenceError:未定义UpdateStores;ChartModel是AppViewModel的一部分吗?最好设置一个JSFIDLE来显示您的设置并重现您的问题。通过问题注释进行交互式猜测是解决这一问题的最糟糕的方法。我将致力于创建fiddle,这是一段很长的html代码。顺便说一句,ChartModel与AppViewModel是分开的。请尝试将其减少到绝对最小值,这样仍然会重现您的问题。谢谢。实际上,我已经将可观察值传递到数组中。self.mdaScore是可观察的。但主要的问题是我应该去掉括号。
self.mdaVals = ko.observableArray([]);
self.mdaVals.push({ number: ko.observable(1), score: ko.observable(20)});
self.mdaVals()[0].number(2);
self.mdaVals()[0].score(10);