我有一个将数据发送到服务器的简单应用程序:
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");
}}
我所做的并不是所谓的成功功能。
请帮忙。
由于 亚当
答案 0 :(得分:2)
更好的方法是遵循完善且强大的JavaScript事件。 Backbone会触发四个相当重要的事件:sync
,error
,destroy
和invalid
。
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没有这样做,因为它是一个可能有希望的框架,只要它没有那么紧密耦合并且难以用于最简单的任务。