javascript - Backbone.js:如何处理模型和服务器响应之间的差异

标签 javascript model backbone.js

我正在编写一个 Backbone 应用程序,我无法控制服务器返回的实体。

事实证明,拥有数据的内部表示形式与服务器使用的 JSON 略有不同对我来说很方便。在一个方向上,事情很简单:我可以编写一个 Model.parse() 方法,它将服务器返回的 JSON 作为输入并返回我的对象​​的属性。

我不太确定在另一个方向上该怎么做。我找不到在序列化我的对象以进行保存时调用的方法。有Model.toJSON() 但是在保存模型前好像没有用到

How am I supposed to handle this difference?

最佳答案

首先 - annotated source是查找有关 Backbone 问题的答案的最佳场所。

查看 Backbone.sync 的源代码,您可以看到模型是使用 JSON.stringify(model.toJSON()) 序列化的(假设您没有使用emulateJSON) 所以重写这个方法应该能达到你需要的效果。如果没有简化的测试用例,我无法解释为什么这对您不起作用。

更长的答案是,要完全控制服务器-客户端同步,您应该编写自己的 Backbone.sync 实现。该方法相当简单(请参阅带注释的源代码),如果您只想进行简单的更改,则可以简单地包装原始同步。

例如:

function mySyncFunction(method, model, options){
  if(method == 'create' || method == 'update'){
    options.contentType = 'application/json';
    options.data = model.serializeForServer(); //You will need to write this method
  }
  return Backbone.sync(method, model, options);
}

要使用自定义同步方法,只需将其声明为模型的一部分

var myModel = Backbone.Model.extend({ 
  ...

  "sync": mySyncFunction,

  ...
});

关于javascript - Backbone.js:如何处理模型和服务器响应之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8817583/

相关文章:

javascript - 从实例中获取主干 View 的父类

javascript - 标签难以点击

javascript - 从后面的代码调用警报不起作用

ruby-on-rails - rails : Modifying a Model Generated by Scaffolding

ruby-on-rails - 将模型属性限制为 Rails 中的值列表的方法是什么?

asp.net-mvc - 模型中名为 Title 的属性与 View 中名为 View.Title 的属性之间的绑定(bind)冲突(在 MVC 中)

javascript - 主干过滤

javascript - BackboneJs 集合和 Rest API 调用

javascript - Ajax文件上传失败

javascript - 如何使用 Acrobat javascript 在文本区域中输入时将每个字符大写?