下面是从 SlickGrid 示例派生的非常简化的代码片段:
模型.js:
(function($) {
function RemoteModel() {
var someArr=[0];
var someVar=0;
var onDataLoadedSuccess = new Slick.Event();
function ensureData(from, to) {
h_request = setTimeout(function() {
req = $.ajax({
url: url,
context: this,
success: function(resp) {
onSuccess();
}
});
}, 3000);
}
function onSuccess() {
someVar=someVar+100;
someArr[0]=someArr[0]+100;
console.log(someVar + " " + someArr[0]); // yes values are changing properly for both !
onDataLoadedSuccess.notify({ from: from, to: to });
}
return {
"someArr": someArr,
"someVar": someVar,
"onDataLoadedSuccess": onDataLoadedSuccess,
};
}
})(jQuery);
主.js:
var loader=new RemoteModel();
var grid=new Slick.Grid("#wlGrid", loader.data, columns, options);
grid.onViewportChanged.subscribe(function(e, args) {
var vp = grid.getViewport();
loader.ensureData(vp.top, vp.bottom);
});
loader.onDataLoadedSuccess.subscribe(function(e, args) {
// someVar is always 0 :( ! someArr[0] is changing fine .. why ???
console.log(loader.someVar + " " + loader.someArr[0]);
});
因此,网格 () 上的一个事件onViewportChanged
正在调用ensureData
模型,这会增加someVar
和someArr[0]
,这两者都由 的返回值公开RemoteModel
。
增加事件后,onDataLoadedSuccess
由模型触发,但是在该事件中,只有 的值发生loader.someArr[0]
了变化。
为什么someVar
in的值onDataLoadedSuccess
总是为零?这是范围问题吗?为什么someArr[0]
改变罚款的价值?
如何正确读取someVar
in的值onDataLoadedSuccess
?