我想教自己一些更好的JS開發實踐,所以我在JavaScript對象包裝器中編寫我的最新VLE小部件。對象中的變量範圍
var TutorGroupPoints = {
URL: 'http://staff.curriculum.local/frog/rewards.php',
CurrentUser: UWA.Environment.user.id,
Groups: { },
Sorted: [ ],
init: function() {
/* retrieve all of the groups from Frog and store them in a variable */
Frog.API.get('groups.getAll',
{
'onSuccess': function (data) { this.Groups = data; },
'onError': function(err) { alert(err); }
});
},
yearClick: function(year) {
alert(this.Groups);
for (var i = 0; i < this.Groups.length; i++) {
if (this.Groups[i].name.indexOf(year) == 0 && this.Groups[i].name.indexOf('/Tp') != -1) {
var arrayToPush = { 'id': this.Groups[i].id, 'name': this.Groups[i].name };
this.Sorted.push(arrayToPush);
}
}
}
};
widget.onLoad = function(){
TutorGroupPoints.init();
$('#nav li a').click(function() {
TutorGroupPoints.yearClick($(this).attr("id"));
});
}
的Frog.API
調用檢索有關從我們的VLE(虛擬學習環境)的學生/員工信息。
我想要做的是將這些信息(在名爲data
的變量中檢索到)存儲在類範圍變量中,以便與其他函數一起使用。
我想我會做到這一點通過聲明Groups
變量早期然後用data = this.Groups
,但是當我運行yearClick
功能,this.Groups
簡單地表現爲[object Object]
其中data
警報爲對象的負荷,即[object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object] [object Object]
。
當我將Groups
更改爲[ ]
時,警報完全爲空。
因此,我猜這是一個範圍問題。如何將data
從Frog.API
調用中存儲到我可以與其他函數一起使用的變量中?以前我只是使用了函數,即'onSuccess': function (data) { someOtherFunction(data); },
,但我不認爲這是一個很乾淨或實用的方法呢?
由於提前,
哈哈,我們再次衝突;-) – Alnitak 2012-08-14 10:17:30
不知道誰贏了這一次 - 他們都說「2分鐘前」。也許我們應該制定一個輪班輪換:) – Utkanos 2012-08-14 10:19:23
FWIW,這個問題與呼叫是異步的無關。這是它使用內部函數的事實。 – Alnitak 2012-08-14 10:19:42