【发布时间】:2014-01-28 15:33:01
【问题描述】:
如何在主干同步中填充主干集合,以便在主干同步之外使用生成的集合。
这是一个例子:
mycollection = new MyCollection();
mycollection.fetch();
// after a few seconds ... it triggers the success function
mycollection.length; //prints 0 :S
这是我的主干同步代码:
define(["backbone"], function (bb) {
bb.sync = function (method, model, options) {
var sql = "";
if (!model.tabla) {
if (options && options.error)
options.error("No property 'tabla' for model");
}
switch (method) {
case 'create':
break;
case 'update':
break;
case 'delete':
break;
case 'read':
sql = "select * from " + model.tabla;
break;
}
console.log("MODELO", model);
if (app.db == undefined) return;
app.db.transaction(function (tx) {
tx.executeSql(sql, [], function (tx, res) {
var resp = [];
for (var i = 0; i < res.rows.length; i++) {
resp.push(res.rows.item(i));
}
if (options && options.success) options.success(resp);
}
);
}, function (e) {
console.log(e);
if (options && options.error) options.error(e);
});
}
}
);
我的问题是输入模型没有被结果数组修改。我该怎么做?
【问题讨论】:
-
我不确定我是否完全按照您在此处尝试完成的操作。我是否正确,您希望与浏览器本地存储而不是外部服务器进行交互?如果是这种情况,请查看 Backbone.localstorage 扩展 documentup.com/jeromegn/backbone.localStorage
-
@JonathanW 似乎您以正确的方式进行操作。我用覆盖
Backbone.sync方法的简单示例创建了jsfiddle,该方法很好地修改了外部集合。 jsfiddle.net/gEBfV主要功能是调用options.success(resp);