サイトにさまざまな種類のデータ(画像、テキスト、音声)を追加できるが、これらの種類は拡張できるとします。 可能なタイプはデータベースに保存されます。 毎回基地から出るのは非常に高価です。 一度取得して使用する必要があります。
したがって、データをロードします。
app.models.dataTypes = new DataTypesCollection(); app.models.dataTypes.fetch();
ここで、ユーザーにapp.models.dataTypesをどこでも表示します 。 しかし、ユーザーがこのフィールドを必要とするページにすぐに移動した場合、パンクする可能性が1つありますか? これを行うには、データが受信されるイベントを作成します。
app.models.dataTypes = new DataTypesCollection(); app.models.dataTypes.fetch({ success: function() { Backbone.history.trigger("dataTypesLoaded"); } });
次に、このイベントを「キャッチ」する必要があります。 このために、関数loadDataTypesを作成しました 。この関数は、データを配置する場所 ( place )をパラメーターとして受け取ります。 このブロックを1ページの複数の場所に表示する必要があるためです。 (データの追加と編集は1ページで行われます)。
function loadDataTypes(place) { place.empty(); // var addDataTypes = function() { // _.each(app.models.dataTypes.models, function(item) { item.set("value", item.get("data_type_code")); item.set("text", item.get("data_type_name")); var selectItem = new SelectItemView({ // option el: place, model: item }); selectItem.render(); // }); } if (app.models.dataTypes.models.length != 0) { // addDataTypes(); } else { // , "" . Backbone.history.on("dataTypesLoaded", addDataTypes); } }
したがって、たとえば最初のロードでデータをロードし、適切な場所でそれを発行します。 任意の番号に電話できます。
しかし、一般的に言えば、このようなフィールドを多数持つことができます。 すべてのフィールドに対して、同様の関数を記述し、すべてのデータはロード時に非同期にロードされます。 ユーザーは、すべてがロードされる速度に気付くことさえありません。
利点から、サーバーからデータを一度だけ取得し、必要なだけ使用することができました。 したがって、ユーザーを傷つけることなく。
PS SelectItemViewの説明が必要な場合は、書き込み、追加できますが、すべては簡単です。