UNPKG

alloy

Version:

Appcelerator Titanium MVC Framework

72 lines (63 loc) 1.94 kB
var Alloy = require('alloy'), _ = require("alloy/underscore")._, TAP = Ti.App.Properties; function S4() { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); } function guid() { return (S4()+S4()+'-'+S4()+'-'+S4()+'-'+S4()+'-'+S4()+S4()+S4()); } function Sync(method, model, opts) { var prefix = model.config.adapter.collection_name ? model.config.adapter.collection_name : 'default'; var regex = new RegExp("^(" + prefix + ")\\-(.+)$"); var resp = null; if (method === 'read') { if (model instanceof Backbone.Collection) { // is collection var list = []; _.each(TAP.listProperties(), function(prop) { var match = prop.match(regex); if (match !== null) { list.push(TAP.getObject(prop)); } }); resp = list; } else { // is model var obj = TAP.getObject(prefix + '-' + model.id); model.set(obj); resp = model.toJSON(); } } else if (method === 'create' || method === 'update') { if (!model.id) { model.id = guid(); model.set(model.idAttribute, model.id); } TAP.setObject(prefix + '-' + model.id, model.toJSON() || {}); resp = model.toJSON(); } else if (method === 'delete') { TAP.removeProperty(prefix + '-' + model.id); model.clear(); resp = model.toJSON(); } // process success/error handlers, if present if (resp) { if (_.isFunction(opts.success)) { opts.success(resp); } if (method === "read") { model.trigger("fetch"); } } else { if (_.isFunction(opts.error)) { opts.error(resp); } } } module.exports.sync = Sync; module.exports.beforeModelCreate = function(config) { // make sure we have a populated model object config = config || {}; config.columns = config.columns || {}; config.defaults = config.defaults || {}; // give it a default id if it doesn't exist already if (typeof config.columns.id === 'undefined' || config.columns.id === null) { config.columns.id = 'String'; } return config; };