【问题标题】:How to show message after Backbone model was deleted?删除主干模型后如何显示消息?
【发布时间】:2016-01-21 10:18:47
【问题描述】:

我在我的简单 Web 应用程序中使用 Backbone 来管理集合和模型。 应用程序有一个事件管理器,它监听一些 Backbone 事件并显示正确的消息。例如,当模型添加到集合或编辑时,我会显示消息“模型已添加”和“模型已编辑”。

但是当我从集合中删除模型时,我遇到了一个问题。 Backbone 在删除过程中生成下一个事件:

1) 请求 - 向服务器发出“DELETE”请求后的事件 2) 销毁 - 模型被删除。 3) 移除 - 模型已从所有集合中移除 4) 同步 - 模型已同步

我有这样的代码:

onSave: function () {
  console.log("Model was saved");
},

onRemove: function() {
  console.log("Model was removed");
}

Backbone.Notifications.on('sync',       this.onSave,            this);
Backbone.Notifications.on('remove',     this.onRemove,          this);

所以当我从集合中删除模型时,我收到了 2 条消息。第一个是“模型已删除”,第二个是“模型已保存”。 如何防止消息重复或使用什么代码结构向用户显示所有 CRUD 操作的消息?谢谢。

【问题讨论】:

  • “如何防止消息重复” - 我没有看到您所指的重复..?
  • sync 处理程序不应说“模型已保存”。为许多操作发出同步。至少在这种情况下,它应该说“模型已从服务器中删除”

标签: backbone.js


【解决方案1】:

sync 被调用用于任何 CRUD 操作。当您销毁模型时,模型首先从集合中删除,触发 onRemove 处理程序,然后从服务器调用 syncDELETE 模型,这会触发第二个事件处理程序。

您可以重载同步以监听正在执行的 CRUD 操作并记录:

var sync = Backbone.prototype.sync;

Backbone.prototype.sync = function (method, item, options) {
  console.log('Method called was: ', method);
  sync.apply(item, arguments);
};

【讨论】:

  • ...希望这可以从生产代码中删除
【解决方案2】:

其中一个方法是走成功处理程序路线:

model.destroy({
  success: function(){
    alert('Model deleted');
  }
});

这只会在处理完 DELETE 后服务器发送 200 时触发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2020-06-30
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多