JavaScriptでリポジトリパターンを実装しようとしています。私はViewModel私はそれをInitializeメソッドを呼び出すときに、データで初期化したいと思います。すべて私のAJAX呼び出しからデータを返すことができないことを除いて、場所に落ちているようです。データがajax呼び出しから戻ってきているのがわかりますが、SomeViewModelのdone関数でデータをキャプチャしようとするとnullになります。ajax呼び出しは外部JSファイルからデータを返しません
誰かが私がここで間違っているところを指摘してくれますか?
P.S:非同期呼び出しを行っていないので、コールチェーンが正しく維持されていることに注意してください。
これは私のリポジトリがどのように見えるかです:
function SomeRepository(){
this.LoadSomeData = function loadData()
{
$.ajax({
type: "POST",
url: "someUrl",
cache: true,
async: false,
contentType: "application/json; charset=utf-8",
data: "{}",
dataType: "json",
//success: handleHtml,
success: function(data) {
alert('data received');
return data;
},
error: ajaxFailed
});
function ajaxFailed(xmlRequest) {
alert(xmlRequest.status + ' \n\r ' +
xmlRequest.statusText + '\n\r' +
xmlRequest.responseText);
}
}
};
これは私のViewModelがどのように見えるかです:
function SomeViewModel(repository){
var self = this;
var def = $.Deferred();
this.initialize = function() {
var def = $.Deferred();
$.when(repository.LoadSomeData())
.done(function (data) {
def.resolve();
});
return def;
};
}
これは私がaspxページから呼び出しています方法です:
var viewModel = new SomeViewModel(new SomeRepository());
viewModel.initialize().done(alert('viewmodel initialized'));
alert(viewModel.someProperty);
これはうまくいきますが、同期型のajaxは全体的には素晴らしい良いアイデアではありません。 – Pointy
答えをありがとう。私の問題は少し異なりますが、答えは意味があります。私はこれを受け入れ、ajaxリクエストからデータを返す1つの方法です。 – Asdfg