Position Absolute

使用parse在backbone.js中使用API​​响应

最近是一个骨干骨干的行为是让我在服务器上保存后重新同步模型。

您知道,您只需设置更改的型号,将其保存在后台中的服务器上,并在您的应用程序中继续您的一天。然而,备备患者耐心等待来自服务器API的响应,如果响应与当前的模型状态不对应,则它将响应属性设置回模型。

那真是太好了骨干,但如果你的回复还包含其他数据,会发生什么?您不希望在您的模型中设置非相关数据,这是一个笨重的。

在开始之前,我需要说我可以访问API并对它进行修改,如果您只需插入第三方API,这将更加困难。

你好解析

在骨干中非常好的一件事是,几乎没有任何交易。重新同步模型的函数是解析的,并且在型号定义中覆盖很容易。

  parse : function(resp, xhr) {
  	return resp;
  },

您以上所拥有的是您的服务器响应的骨干,它会检查值是否与您的模型相同,如果不是它只是将其返回到模型,以便更新它。

人们如何停下来?不是很难:

  parse : function(resp, xhr) {
 
  },

现在您的模型永远不会在您的服务器响应后更新。

盘子

现在您无法从服务器获取任何东西,当您尝试从服务器获取集合时,并不真正有用,以此结束我们将修改API并返回一个响应的类型请求。

  parse : function(resp, xhr) {
      if(resp.type =="read"){
        return resp;
      }
    },

在那里,当您读取数据时,您将收到Untoched和Backbone应该自己处理正常过程。

好的,但我创建一个新型号时id怎么样?

当您创建新模型并将其保存到API时,您需要数据库中的新ID可以再次编辑该模型。如果您没有那个ID,则无法告诉您的API需要编辑内容。

为此,我们必须使用备份正在执行的操作类型来修改我们的解析功能。

  parse : function(resp, xhr) {
  	if(resp.type && (resp.type =="create")){
  		return {
  			"id": resp.data.id
  		}	
  	}else if(resp.type && (resp.type =="更新")){ }else{	
        	return resp;
  	}
   },

正如您所看到的,如果请求类型是 “创造” 我返回模型的ID。然后,我唯一的问题是 更新 将恢复对模型回复的行动。在上面的示例中,如果类型不是 更新,骨干可以正常继续。

我的服务器响应可以看出这样的东西:

{
  "status":"success",
  "type":"更新",
  "message":"Model as been updated in the database",
  "dataModel":{
    "id":4,
    "name":"This is a model"
  }
}

使用Parse对模型和全球

您可以始终在每个模型上定义Parse,如您的URL,但一般来说它在所有模型上都会是相同的代码,因此您可以做的一件事是扩展Backbone.js Model的原型。

 Backbone.Model.prototype.parse = function(resp, xhr) {
  	if(resp.type && (resp.type =="create")){
  		return {
  			"id": resp.data.id
  		}	
  	}else if(resp.type && (resp.type =="更新")){ }else{	
        	return resp;
  	}
 }

你去了!