(免责声明:这个问题比标题所暗示的要简单得多!)
我的程序架构中再次出现一个问题,即监听模型的更改。
我已经设置了一些集合(很像 in 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
}
如果同一用户被保存两次,则事件会被多次添加/触发。有没有更好的模式呢?
事件是否应该通过集合冒泡并以这种方式处理?
这是一个实际的例子(我最感到羞耻的一个)
$("#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();
}
});