-
-
Save aaronksaunders/5066608 to your computer and use it in GitHub Desktop.
| // add all items to collection | |
| Alloy.Collections.Fugitive.reset([{ | |
| "name" : "Jeff Haynie" | |
| }, { | |
| "name" : "Nolan Wright" | |
| }, { | |
| "name" : "Don Thorp" | |
| }, { | |
| "name" : "Marshall Culpepper" | |
| }, { | |
| "name" : "Blain Hamon" | |
| }]); | |
| // save all the items | |
| Alloy.Collections.Fugitive.saveAll(); | |
| // get the collection object | |
| Alloy.Collections.instance("Fugitive"); | |
| // delete all items | |
| Alloy.Collections.Fugitive.deleteAll(); |
| exports.definition = { | |
| config : { | |
| "columns" : { | |
| "name" : "TEXT", | |
| "captured" : "integer", | |
| "url" : "TEXT", | |
| "capturedLat" : "real", | |
| "capturedLong" : "real" | |
| }, | |
| "defaults" : { | |
| "name" : "", | |
| "captured" : 0, | |
| "url" : "", | |
| "capturedLat" : "", | |
| "capturedLong" : "" | |
| }, | |
| "adapter" : { | |
| "type" : "sql", | |
| "collection_name" : "fugitives" | |
| } | |
| }, | |
| extendModel : function(Model) { | |
| _.extend(Model.prototype, { | |
| }); | |
| // end extend | |
| return Model; | |
| }, | |
| extendCollection : function(Collection) { | |
| // helper functions | |
| function S4() { | |
| return (0 | 65536 * (1 + Math.random())).toString(16).substring(1); | |
| } | |
| function guid() { | |
| return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4(); | |
| } | |
| _.extend(Collection.prototype, { | |
| deleteAll : function() { | |
| var collection = this; | |
| var sql = "DELETE FROM " + collection.config.adapter.collection_name; | |
| db = Ti.Database.open(collection.config.adapter.db_name); | |
| db.execute(sql); | |
| db.close(); | |
| collection.trigger('sync'); | |
| }, | |
| saveAll : function() { | |
| var collection = this; | |
| var dbName = collection.config.adapter.db_name; | |
| var table = collection.config.adapter.collection_name; | |
| var columns = collection.config.columns; | |
| db = Ti.Database.open(dbName); | |
| db.execute("BEGIN;"); | |
| collection.each(function(model) { | |
| if (!model.id) { | |
| model.id = guid(); | |
| model.attributes[model.idAttribute] = model.id; | |
| } | |
| var names = [], values = [], q = []; | |
| for (var k in columns) { | |
| names.push(k); | |
| values.push(model.get(k)); | |
| q.push("?"); | |
| } | |
| var sqlInsert = "INSERT INTO " + table + " (" + names.join(",") + ") VALUES (" + q.join(",") + ");"; | |
| db.execute(sqlInsert, values); | |
| }); | |
| db.execute("COMMIT;"); | |
| db.close(); | |
| collection.trigger('sync'); | |
| } | |
| }); | |
| // end extend | |
| return Collection; | |
| } | |
| }; |
Thx! Big hug from TiConf 2014 Amsterdam!
Thank You! So useful
@aaronksaunders minor optimization: take the names.push(k) out of collection.each and create the names array in a separate one-time cycle.
On a 100 element insert you'll save (100*numcols)-1 .push() calls.
@aaronksaunders I'm using this SaveAll function in my model.
I have this config:
config: {
columns: {
"jobID": "INTEGER",
"jobTitle": "TEXT",
"joblastUpdated": "TEXT",
"jobLastDayOfService": "TEXT",
"jobInstructionReported": "INTEGER",
"jobInstructions": "TEXT",
"noReports": "INTEGER",
"instructionId": "INTEGER"
},
adapter: {
type: "sql",
collection_name: "jobs",
db_name: "DB",
idAttribute:'jobID'
}
},
jobID is unique and i'm receiving this id from the backed same as other values.
Insert is working fine but i can't make insert or replace to work:
var sqlInsert = "INSERT OR REPLACE INTO " + table + " (" + names.join(",") + ") VALUES (" + q.join(",") + ");";
db.execute(sqlInsert, values);
@Adriano72 updated