私が使用する ajax 呼び出しのみを含む別の typescript ファイルがあります。
ノックアウト可観測配列をロードするために使用している2番目のtypescriptファイルがあります
最後に、ノックアウト オブジェクトを呼び出して、データをドロップダウンにバインドしようとするビューがあります。
これは私のajaxデータ呼び出しです
export class ILRDataService {
public dataServiceOptions: DataServiceOptions;
public getPeriodsForCandidate() {
var urlToUse = this.dataServiceOptions.baseUrl + 'ilrdata/' +
this.dataServiceOptions.periodIdentifier +
'/AcademicPeriods/' + this.dataServiceOptions.candidateIdentifier;
return $.ajax({
url: urlToUse
});
}
}
これは私のクラスから呼び出されます。これは getPeriodsForCandidate メソッドを呼び出すメソッドです
export class AcademicPeriod {
private dataServiceOptions: DataServiceOptions;
public LoadPeriodsForCandidate() {
var self = this;
var dataService = new Ilr.ILRDataService(self.dataServiceOptions);
return dataService.getPeriodsForCandidate()
.done(function (academicPeriods) {
$.each(academicPeriods, function (index, element) {
self.Items.push(element);
console.log(element);
});
});
}
}
そして最後に、私の見解では、次のコードがあります
var academicPeriodsViewModel = new Ilr.AcademicPeriod(dataServiceOptions);
$.when(academicPeriodsViewModel.LoadPeriodsForCandidate())
.then(function() {
ko.applyBindings(academicPeriodsViewModel, document.getElementById("AcademicPeriods"));
});
私の問題は、AcademicPeriod 期間の LoadPeriodsForCandidate メソッドにあります。関数は、$.each の処理後ではなく、すぐに戻り、Internet Explorer でバインディングが失敗する原因となっています。
バインディングは毎回失敗するわけではありません。F12 開発者ツールを開いた場合、バインドは機能します。ただし、F12 開発ツール ウィンドウが閉じていると、バインディングが頻繁に失敗します。コンソールを表示するには F12 ウィンドウを開く必要があるため、失敗メッセージが表示されません。その瞬間、すべてが機能します。
Chrome または Firefox で上記のコードを使用しても問題ありません。
テストしましたが、新しいコールバック関数を作成してコードを次のように変更した場合:
public LoadPeriodsForCandidate(callbackFunction) {
var self = this;
var dataService = new Ilr.ILRDataService(self.dataServiceOptions);
dataService.getPeriodsForCandidate()
.done(function (academicPeriods) {
$.each(academicPeriods, function (index, element) {
self.Items.push(element);
});
callbackFunction();
});
}
ビューのコードを次のように変更します。
academicPeriodsViewModel.LoadPeriodsForCandidate(bindAcademicPeriods);
function bindAcademicPeriods() {
ko.applyBindings(academicPeriodsViewModel, document.getElementById("AcademicPeriods"));
}
その後、すべてがIEで動作します
しかし、私はこれはもっと面倒だと思っており、メソッド LoadPeriodsForCandidate を変更して $.when().then() を正しく使用できるようにするためにどのように/何をする必要があるかを知りたいと思っています