我确定这是一个非常常见且基本的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我才能在页面刷新时启动正确的模型/集合,我错过了什么?
答案 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()
丑陋但有效..