Backbone.sync成功函数未调用

时间:2013-03-05 10:26:07

标签: backbone.js backbone-views backbone-events

我有一个将数据发送到服务器的简单应用程序:

this.model.save(null, {success: dataSentOK});

然后从服务器@:

删除数据
Backbone.sync("delete", data, {success: dataSentOK});

这两种方法都可以对服务器起作用(添加和删除数据)。

但是,在第二种方法Backbone.sync(...)中,不会调用成功回调。

谁能告诉我我做错了什么?我已经查看了Backbone.js源代码,我已尝试过显式函数调用:

{success: function(){
    console.log("Done");
}}

各种形式的参数:

{success: function(data, textStatus, jqXHR){
    console.log("Done");
}}

我所做的并不是所谓的成功功能。

请帮忙。

由于 亚当

2 个答案:

答案 0 :(得分:2)

更好的方法是遵循完善且强大的JavaScript事件。 Backbone会触发四个相当重要的事件:syncerrordestroyinvalid

同步操作成功时会触发

sync。 同步操作失败时会触发error。 验证失败时会触发invalid(如果已有)。 销毁模型时会触发destroy

因此,我会亲自为您关注的特定模型绑定此事件,如果是全部,则将其绑定在模型定义中。为了我的目的,我绑定到事件的内容会根据上下文进行更改,因此我会在视图中按模型绑定它。

示例:

var MyModel = Backbone.Model.extend({
  // your model definition.
});

var MyView = Backbone.View.extend({
  // your view definition
  initialize : function() {
    this.model.on('sync', this.onSync);
    this.model.on('error', this.onError);
    this.model.on('destroy', this.onDestroy);
  },
  this.onSync : function(model, errors, options) {
    // your code
  },
  this.onError : function(model, errors, options) {
    // your code
  },
  this.onDestroy : function(model, errors, options) {
    // your code
  }
});

答案 1 :(得分:0)

Backbone.js,使用JQuery.ajax(...)。所以我直接使用JQuery解决了我的Backbone.js通信问题。

Backbone相信他们通过在自己的代码中包含一个完美且功能强大的API来增加价值,因为他们选择在用于CRUD模型对象的模型和传输协议之间紧密耦合它们的架构。

Model对象必须具有URL属性,这意味着您必须使用模型的send(), fetch() etc函数进行网络通信。其中,实习生意味着如果您希望您的模型只是一个DTO,那么您就不能使用Backbone.js。这也意味着如果你想直接使用JQuery,那么你也可以根本不使用他们的MVC架构。

将URL附加到模型对象的含义也意味着应该为所有CRUD操作使用相同的URL。这没有意义,特别是如果您使用REST服务。

一个好的架构将模块化并遵循the separation of concerns principle。遗憾的是Backbone.js没有这样做,因为它是一个可能有希望的框架,只要它没有那么紧密耦合并且难以用于最简单的任务。