Search code examples
backbone.jstitaniumtitanium-alloy

override get method in Alloy model


i'm trying to override get: calls in Alloy model, very similar to Backbone, i wrote this but doesn't work

extendModel: function(Model) {      
        _.extend(Model.prototype, {
            // extended functions and properties go here
            get: function (attr) {
                if (attr=='image')
                {
                    return Ti.Utils.base64decode(this['image'])
                }

                    return this[attr];
              }
        });

        return Model;
    },

Solution

  • Here is how i am overriding the set and add methods hope it helps you:

    exports.definition = {
        config: {
    
            adapter: {
                type: "properties",
                collection_name: "careCenter",
                idAttribute : "CareCenterID"
            }
        },      
        extendModel: function(Model) {      
            _.extend(Model.prototype, {
                idAttribute : "CareCenterID"
                // extended functions and properties go here
            });
    
            return Model;
        },
        extendCollection: function(Collection) {        
            _.extend(Collection.prototype, {
                add : function(attrs, opts){
                    var isDuplicated = false;
                    if(attrs && attrs.get){
                        isDuplicated = this.any(function(model){
                            return model.get("CareCenterID") === attrs.get("CareCenterID");
                        });
                    }
                    if(isDuplicated){
                        return false;
                    } else {
                        Backbone.Collection.prototype.add.call(this, attrs, opts);
                    }
                },
                comparator : function(model){
                    return -model.get("state");
                }
            });
    
            return Collection;
        }
    }
    
    
    extendModel: function(Model) {      
            _.extend(Model.prototype, {
                idAttribute : "RecipientID",
                set : function(attrs, opts){
                    if(attrs.Age != null){
                        var age = attrs.Age;
                        var result = "";
                        if(age <= Alloy.CFG.INFANT){
                            result = "infant";
                        } else if(age <= Alloy.CFG.CHILD){
                            result = "child";
                        } else if(age <= Alloy.CFG.TEENAGER){
                            result = "teenager";
                        } else {
                            result = "adult";
                        }
                        attrs.Group = result;
                    }
    
                    return Backbone.Model.prototype.set.call(this, attrs, opts);
                }
            });
    
            return Model;
        },