我有一个“LocalStore”对象用于在本地存储数据。它基于Lawnchair对象。
var LocalStore = function(name) {
var that = this;
that.name = name;
that.lawnchair = Lawnchair({ name: that.name }, function(store) {
this.before('save', function(record){
console.log("saving " + that.name);
console.log(record);
});
this.after('save', function(record){
console.log("saved " + that.name);
console.log(record);
that.getData(function(records){
console.log("now it's this");
console.log(records);
});
});
});
that.getData = function(callback) {
that.lawnchair.get(that.name, callback);
};
};
然后使用此方法使用_.extend
(来自Underscore.js库)扩展LocalStore:
save: function(collection, callback) {
this.lawnchair.save({ key:this.name, value: collection }, function(record) {
callback(record);
});
}
此代码用于将Backbone.js Collection对象更新为Lawnchair。第一次“保存”运行我的用户集合,它正确保存并显示该对象是一个简单的键/值对,其中值是一个数组。
稍后在我的代码中,当用户选择默认项目时,我修改用户集合并再次使用用户更新的“defaultProjectId”调用“save”。代码运行没有错误,但Lawnchair的after('save')
代码运行并向我显示:
- 返回的record
对象是一个键/值对,其中value是一个完整的Backbone.js集合,其defaultProjectId属性设置正确。
- 从数据库中获取最新信息的getData
方法仍然显示为具有值的键/值对,简单的数组和defaultProjectId设置不正确。
我不知道该做什么。它应该只是简单地调用“lawnchair.save”更新记录,但它不会这样做。
答案 0 :(得分:1)
我重新创建了你的代码。我传递的是一系列对象,而不是骨干集合。这似乎有效。您可以在Firebug中看到日志记录输出。
我使用自己的扩展代码添加save()
。老实说,我不明白为什么你会这样做,而不是只是在原型中添加一个属性。您的代码可能在这方面有所不同。
如果我发布的内容适用于您,您是否可以修改该代码以显示您在做什么?如果可能,请在jsfiddle上重新创建问题...