小编典典

“如何”将整个集合保存在Backbone.js-Backbone.sync或jQuery.ajax中?

ajax

我很清楚这是可以做到的,并且我已经研究了很多地方(包括:保存整个收藏集的最佳实践?)。但是我仍然不清楚它到底是用代码编写的吗?(该帖子以英语进行了解释。最好有一个javascript特定的解释:)

假设我有一个模型集合-
模型本身可能具有嵌套集合。我已经重写了父集合的toJSON()方法,并且得到了一个有效的JSON对象。我希望“保存”整个集合(对应的JSON),但是主干似乎并没有内置该功能。

var MyCollection = Backbone.Collection.extend({
model:MyModel,

//something to save?
save: function() {
   //what to write here?
 }

});

我知道你必须在某个地方说:

Backbone.sync = function(method, model, options){
/*
 * What goes in here?? If at all anything needs to be done?
 * Where to declare this in the program? And how is it called?
 */
}

一旦“视图”完成处理,它便负责告诉集合将自身“保存”在服务器上(能够处理批量更新/创建请求)。

出现的问题:

  1. 如何/以何种方式编写代码以“将所有内容连接在一起”?
  2. 回调的“正确”位置是什么?如何指定“成功/错误”回调?我的意思是语法吗?我不清楚在主干中注册回调的语法…

如果确实是一项棘手的工作,那么我们可以在视图中调用jQuery.ajax并通过this.successMethodthis.errorMethod作为成功/错误回调吗?能行吗

我需要与主干的思维方式保持同步-我知道我肯定缺少某些东西,可以同步整个收藏。


阅读 253

收藏
2020-07-26

共1个答案

小编典典

我立即想到的是不覆盖Backbone.Collection上save方法的方法,而是将集合包装在另一个Backbone.Model中并在其上覆盖toJSON方法。然后,Backbone.js会将模型视为单一资源,而您不必破解Backone认为过多的方式。

请注意,Backbone.Collection具有toJSON方法,因此您的大部分工作都已为您完成。您只需将包装器Backbone.Model的toJSON方法代理到Backbone.collection。

var MyCollectionWrapper = Backbone.Model.extend({
url: "/bulkupload",

//something to save?
toJSON: function() {
    return this.model.toJSON(); // where model is the collection class YOU defined above
 }

});
2020-07-26