私はこの問題を数日間見てきましたが、何が間違っているのか理解できません。私のコードにはいくつかの問題があるようで、これで木の木を見ることができなくなりました。以下のコードをいくつかのコメントとともに含めました。
(function (myPage, $, undefined) {
myPage.contextsArrays = [];
myPage.currentContextsArray = [];
myPage.getTags = function (event) {
// try to resolve tags from local variable
myPage.currentContextsArray = $.grep(myPage.contextsArrays, function (elm) { return elm.id == event.tagArea.Id; });
if (myPage.currentContextsArray.length == 0) {
$.getJSON('/exercises/getstrategycontexts/' + event.tagArea.Id, null, function (tags) {
// despite 200 response codes from the server this doesn't ever get executed …
myPage.contextsArrays.push({ id: event.tagArea.Id, items: tags });
myPage.currentContextsArray = tags;
alert(myPage.currentContextsArray);
});
}
$.get('/templates/strategycontextdc.html', function (template) {
$('#tagHost').html('');
$('#tagHostTitle').html('Tags - ' + event.tagArea.Text);
// myPage.currentContextsArray is ALWAYS [ ]
$.each(myPage.currentContextsArray, function (i, tag) {
var html = Mustache.to_html(template, tag);
$('#tagHost').append(html);
});
});
};
}(window.myPage = window.myPage || {}, jQuery));
ここでやろうとしているのは、ローカル変数内の値の基本的なキャッシュです。タグは、値に対してスコアを追加する方法をユーザーに提供するために UI で使用されます。
タグがまだリクエストされておらず、ローカル変数に格納されていない場合にのみ、サーバーからタグのコレクションをリクエストしたいだけです。
私が理解していないのは、 $.getJSON() が実行される(リクエストが行われ、データとともに200コードが受信される)が、コールバック関数が実行されないため、タグのコレクションが配列に格納されないことです後で取得したり、UI ですぐに使用できるように現在のタグの変数に設定したりします (したがって、再要求された場合でも解決できません)。
私はこの jQuery コマンドを何度も使用してきましたが、このシナリオでこれが実行されない理由がわかりません。基本的にコードの問題は見えません。
私は考えられるすべてを試しました (私はまだ JS に非常に慣れていません)。このコードが単に期待どおりに動作しない理由についての知識を使い果たしました。