ページの読み込み時にアイテム ID のリストがあります。
var itemIds = [1, 5, 10, 11];
ID はリストにレンダリングされ、ユーザーに表示されます。アイテムの詳細情報をロードする関数があり、Promise/A を返します。
function loadInfo(id) { ... }
すべてのアイテムの情報の読み込みは、ページの読み込み時に開始されます。
val infos = {};
$.each(itemIds, function(i, id) { infos[id] = loadInfo(id); }
今問題自体。
ユーザーがアイテム ID をクリックすると:
- アイテム情報がロードされている場合、情報を表示する必要があります
- アイテム情報がまだロードされていない場合は、ロード時に表示する必要があります
簡単に見えます:
$('li').click(function() {
var id = $(this).data('item-id');
infos[id].then(function(info) { $('#info').text(info); });
});
しかし、現在のアイテムがロードされる前にユーザーが別のアイテムを気に入った場合は、現在のアイテムの約束のハンドラーをキャンセルし、新しいアイテムのスケジュールを設定する必要があります。
適切に行う方法は?
私はいくつかの実用的な解決策( currentItemId 変数を維持し、それを約束ハンドラでチェックするなど)を持っていますが、それらは醜いです。代わりに、リアクティブ プログラミング ライブラリを検討する必要がありますか?