除第一次初始提取外,每次更改都保存模型

时间:2013-04-05 17:14:34

标签: backbone.js

我确定这是一个非常常见且基本的Backbone问题,但我找不到答案

我想在每次更改后保存模型,除了从服务器进行初始提取。

例如:

  MyModel = Backbone.Model.extend({
    url: "myModelUrl",
    initialize: function () {
      this.on("change", this.save, this);
    }
  });

获取它时,由于它有一些数据,我得到一个更改事件,然后再次触发保存

 var myModel = new MyModel({id:"123"}); 
 myModel.fetch(); 

有没有办法避免第一次获取第一次保存? (例如,如果模型刚刚被提取,请不要保存)

可能唯一的方法是bootsrtap the models吗?

e.g。基于文档,这真的是唯一的方法吗?

  

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

修改

我在bootstrapping中看到的一个问题是 - 我似乎必须在页面加载时获取整个集合,我不能只获取它的一小部分。为什么?因为如果我的路由使用散列标记,则在页面刷新时,服务器端将不知道我所在的路由(散列部分未发送到服务器)。例如只有当我使用pushState:true我才能在页面刷新时启动正确的模型/集合,我错过了什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

isFirstSave = true

并制作像这样的绑定方法

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

丑陋但有效..