Backbone.js 在每次更改时保存模型,第一次初始提取除外

Backbone.js 在每次更改时保存模型,第一次初始提取除外,backbone.js,Backbone.js,我相信这是一个非常普遍和基本的主干问题,但我找不到答案 我想在每次更改后保存一个模型,但从服务器获取的初始数据除外 例如: MyModel = Backbone.Model.extend({ url: "myModelUrl", initialize: function () { this.on("change", this.save, this); } }); 在获取它时,由于它有一些数据,我得到一个更改事件,然后再次触发保存 var myMod

我相信这是一个非常普遍和基本的主干问题,但我找不到答案

我想在每次更改后保存一个模型,但从服务器获取的初始数据除外

例如:

  MyModel = Backbone.Model.extend({
    url: "myModelUrl",
    initialize: function () {
      this.on("change", this.save, this);
    }
  });
在获取它时,由于它有一些数据,我得到一个更改事件,然后再次触发保存

 var myModel = new MyModel({id:"123"}); 
 myModel.fetch(); 
有没有办法避免第一次获取时的第一次保存?(例如,如果刚刚获取模型,则不保存)

难道这是唯一的办法吗

e、 根据文件,这真的是唯一的方法吗

请注意,不应使用fetch在页面加载时填充集合-加载时所需的所有模型都应已引导到位。fetch用于延迟加载不需要立即使用的接口的模型:例如,包含注释集合的文档可以切换为打开和关闭

编辑:


我在引导中看到的一个问题是——似乎我必须在页面加载时获取整个集合,我不能只获取其中的一小部分。为什么?因为如果我的路由使用哈希标记,在页面刷新时,服务器端将不知道我在哪个路由中(哈希部分不会发送到服务器)。e、 g.只有使用pushState:true,我才能在页面刷新时启动正确的模型/集合,我是否遗漏了什么

不太了解您的要求。但是,如果您只是想避免第一次保存,可以手动设置一个属性

isFirstSave = true
并使您的绑定方法如下所示

onModelChange: =>
  if @isFirstSave
    @isFirstSave = false
  else
    @save()

丑陋但有效。

不太了解您的要求。但是,如果您只是想避免第一次保存,可以手动设置一个属性

isFirstSave = true
并使您的绑定方法如下所示

onModelChange: =>
  if @isFirstSave
    @isFirstSave = false
  else
    @save()

丑陋但有效。

sync
是获取模型时触发的事件。只听一次
sync
。稍后,收听模型上的
change
事件

var self;     
this.listenToOnce(model,'sync', function(){
   self.listenTo(model,'change',self.changeHandler);
});

sync
是获取模型时触发的事件。只听一次
sync
。稍后,收听模型上的
change
事件

var self;     
this.listenToOnce(model,'sync', function(){
   self.listenTo(model,'change',self.changeHandler);
});

谢谢这就是我要找的。p、 s.我认为对于
listenTo
listenToOnce
,主干在方法调用上传递上下文对象(它使用on和once),例如,我认为
被设置为视图,例如,无需保存
self
引用。不过让我核实一下。无论如何,谢谢,很好的解决方案!是的,不需要
var self
Backbone,这里的魔力就在这里。但是你的解决方案当然行得通,而且我认为非常好,谢谢!这就是我要找的。p、 s.我认为对于
listenTo
listenToOnce
,主干在方法调用上传递上下文对象(它使用on和once),例如,我认为
被设置为视图,例如,无需保存
self
引用。不过让我核实一下。无论如何,谢谢,很好的解决方案!是的,不需要
var self
Backbone,这里的魔力就在这里。但是你的解决方案当然行得通,我觉得很好,非常感谢