Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干模型同步状态_Javascript_Rest_Backbone.js - Fatal编程技术网

Javascript 主干模型同步状态

Javascript 主干模型同步状态,javascript,rest,backbone.js,Javascript,Rest,Backbone.js,在我的应用程序中,用户使用一组模型创建一个集合。由于我不想向服务器发出大量请求,因此我创建了一个自定义函数,将这些模型批量保存到服务器。然后,服务器使用所有模型(包括它们的id)进行响应,然后将其设置为各种模型。到目前为止一切顺利 我现在遇到的问题是主干网不知道此时所有模型都与服务器同步。因此,在应用程序的稍后阶段,当我对每个模型调用model.save()时,它会再次将每个模型发送到服务器(应该是自批处理操作以来更改的模型)。我如何让主干网知道所有模型都已同步?我正在查看'changed'和'

在我的应用程序中,用户使用一组模型创建一个集合。由于我不想向服务器发出大量请求,因此我创建了一个自定义函数,将这些模型批量保存到服务器。然后,服务器使用所有模型(包括它们的id)进行响应,然后将其设置为各种模型。到目前为止一切顺利


我现在遇到的问题是主干网不知道此时所有模型都与服务器同步。因此,在应用程序的稍后阶段,当我对每个模型调用model.save()时,它会再次将每个模型发送到服务器(应该是自批处理操作以来更改的模型)。我如何让主干网知道所有模型都已同步?我正在查看'changed'和'hasChanged'属性,但不确定是否应该操作这些属性(我想不是)。

如果模型的
id
属性未设置/为空,主干网将创建
HTTP POST
,以创建模型服务器端

因此,您应该做的是在服务器返回属性时手动设置该
id
属性

另外,如果您的
id
属性不是
id
,您可以告诉主干网这是另一个属性

Cf,文档:

  • 手动设置属性:
  • 模型的id属性:
  • 当您
    save()
    a model时,对图纸下调用的同步方法的引用:

主干网不包括跟踪上次与服务器同步后更改的属性的功能

自上次与服务器同步后,
changed
hasChanged
未处理更改的属性

您必须创建自己的机制来跟踪模型的状态:

  • 每个型号都应该有一个
    hasChangedSinceLastSync
    标志
  • 每个模型都应将(.on)绑定到自己的
    change
    事件,并将标志设置为true
  • 一旦从服务器返回数据(用于读取/创建/更新),请覆盖
    sync
    方法并将标志设置为false

  • 你能提供一个如何实现步骤3的例子吗?这里有一个完整的模型来实现这个想法:要点中有一个错误:sync()应该返回:“return Backbone.sync(方法,模型,选项);”而不是“Backbone.sync(方法,模型,选项);”