0

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

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

例如:

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

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

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

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

难道唯一的方法是引导模型吗?

例如,根据文档,这真的是唯一的方法吗?

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

编辑:

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

4

2 回答 2

3

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

var self;     
this.listenToOnce(model,'sync', function(){
   self.listenTo(model,'change',self.changeHandler);
});
于 2013-04-05T18:57:13.573 回答
0

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

isFirstSave = true

并使您的绑定方法像这样

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

丑陋但有效..

于 2013-04-05T17:40:14.477 回答