【发布时间】:2014-04-13 19:48:51
【问题描述】:
当页面加载时,我通过调用 getGeneJSONData() 获取数据,当我执行数据库更新时,我调用相同的方法来加载新数据,我收到错误“您不能将绑定多次应用于同一元素”
这是代码片段
var geneViewModel = null;
var Gene = function (data) {
data = data || {};
var self = this;
self.geneValue = data.GeneValue;
self.geneCode = ko.protectedObservable(data.GeneCode);
self.geneName = ko.protectedObservable(data.GeneName);
self.geneComments = ko.protectedObservable(data.GeneComments);
};
var ViewModel = function (items) {
var self = this;
var newGene = { "geneValue": "", "geneCode": ko.protectedObservable(null), "geneName": ko.protectedObservable(null), "geneComments": ko.protectedObservable(null) };
self.genes = ko.observableArray(ko.utils.arrayMap(items, function (data) {
return new Gene(data);
}));
self.updateGene = function (gene) {
getGeneJSONData();
}
}
function getGeneJSONData() {
$.ajax({
type: "GET",
url: urlPath + '/GetGenes',
dataType: "json"
}).done(function (result) {
if (result) {
if (result.Success) {
var geneData = result.Data;
geneViewModel = new ViewModel(geneData);
ko.applyBindings(geneViewModel);
}
}
});
};
$(document).ready(function ($) {
getGeneJSONData();
});
我不确定为什么在重新加载数据时会出现此错误。我是否必须在再次应用之前删除绑定?
【问题讨论】:
-
您只需要应用一次绑定。无需为 AJAX 请求创建新的 ViewModel,只需使用相同的 ViewModel 并更新其属性即可。
-
因为每次你发出 ajax 请求时,你都在调用 applybinding 不要那样做。