(免責事項:この質問は、タイトルが示唆するよりもはるかに単純です!)
モデルに対する変更をリッスンするという問題がプログラムアーキテクチャで繰り返し発生します。
Backbone.js
配列を中心に構築された軽量クラスであるコレクションをいくつか設定しました(のように)。コレクションはモデルのコレクションです。ユーザーがモデルに変更を加えると、恐ろしいネストされたイベントが発生し続けます。これは、私が避けようとしている典型的な単純なシナリオです。
$("#user-details").on("click", "#save", onSaveClick);
function onSaveClick()
{
var givennames = $("#givenname").val(),
// Get the model from the collection
var user = users.get($(this).attr("data-id"));
// set the property
user.set("GivenNames", givennames);
// listen for the save event
$(user).on("save", function(){
// Alert the view
});
user.save(); // save event triggers a "save" event on the model
}
同じユーザーが2回保存されると、イベントは複数回追加/発生します。これにはもっと良いパターンがありますか?
イベントはコレクション全体で泡立ち、おそらくそのように処理されるべきでしょうか?
これが実際の例です(私が最も恥ずかしい例です)
$("#user-devices").on("click", ".device button", function(){
var button = $(this),
deviceId = $(this).closest(".device").attr("data-id"),
device = userDevices.get(deviceId);
$(device).on("activate", function(event, device){
button.removeClass("btn-danger").addClass("btn-success")
$("#activation-dialog").modal("show");
})
if (device.get("Active") === "1")
{
$("#reactivation-warning-dialog").modal("show");
$("#reactivation-warning-dialog .btn-primary").on("click", function(){
device.activate();
});
}
else
{
device.activate();
}
});