我正在嘗試使用typescript,Knockout和azure移動服務來獲取一些數據。問題是當我從azure獲取數據時,它是異步的,我無法再獲取viewmodel對象。我認爲這是一些範圍/關閉問題,請幫我找到解決方案。它在Done()的回調函數中爲null;JavaScript和TypeScript範圍問題
這裏是我的打字稿代碼:
class pmViewModel {
public welcomeMsg: string;
public totalCount: number;
constructor() {
this.welcomeMsg = "";
}
}
class Manager {
client: any;
portalVM: pmViewModel;
constructor() {
this.client = new WindowsAzure.MobileServiceClient("url", "key");
this.portalVM = new pmViewModel();
}
LoadData() {
console.log("load data for management portal");
this.portalVM.welcomeMsg = "Hello";
this.portalVM.totalCount = 0;
var dataTable = this.client.getTable('dataTable');
dataTable.take(1).includeTotalCount().read().done(this.populateTotal,this.portalVM);
ko.applyBindings(this.portalVM);
};
populateTotal(result, vm) {
console.log(result);
console.log(vm); //null here
this.portalVM.totalCount = 100000;////this is also null
}
}
和生成的JavaScript代碼:
var pmViewModel = (function() {
function pmViewModel() {
this.welcomeMsg = "";
}
return pmViewModel;
})();
var Manager = (function() {
function Manager() {
this.client = new WindowsAzure.MobileServiceClient("url", "key");
this.portalVM = new pmViewModel();
}
Manager.prototype.LoadData = function() {
console.log("load data for management portal");
this.portalVM.welcomeMsg = "Hello";
this.portalVM.totalCount = 0;
var dataTable = this.client.getTable('dataTable');
dataTable.take(1).includeTotalCount().read().done(this.populateTotal, this.portalVM);
ko.applyBindings(this.portalVM);
};
Manager.prototype.populateTotal = function (result, vm) {
console.log(result);
console.log(vm);
this.portalVM.totalCount = 100000;
};
return Manager;
})();
你需要顯示在錯誤發生。 – RobG 2013-04-04 02:56:30
在完成方法回調(我在那裏寫了一些評論) – 2013-04-04 02:59:55