无法使用Titanium Appcelerator中的Alloy更新模型

Jua*_*eto 2 model updates updatemodel titanium titanium-alloy

我正在尝试使用Alloy更新Titanium中的集合中的模型.

此代码无效:

var contactos = Alloy.Collections.instance('Contact');

var contacto = contactos.get({id: 3});
// Output: {id:3, name:'Juan 3', marcado: 1}
Ti.API.debug('get: ' + JSON.stringify(contacto));

contacto.set({marcado: 0});
// Output: {id:3, name:'Juan 3', marcado: 0}
Ti.API.debug('set: ' + JSON.stringify(contacto));

contacto.save();    
contactos.fetch();

// Output: [{id:3, name:'Juan 3', marcado: 1},{...},{...}]    
Ti.API.debug('despues de save: ' + JSON.stringify( JSON.stringify( contactos ) ));
Run Code Online (Sandbox Code Playgroud)

虽然这是有效的:

var contactos = Alloy.Collections.instance('Contact');

var contacto1 = Alloy.createModel('Contact');
// Output: {id:null, name:'', marcado: 0}
Ti.API.debug('createModel: ' + JSON.stringify(contacto1));

var contacto2 = contactos.get({id: 3});
// Output: {id:3, name:'Juan 3', marcado: 1}
Ti.API.debug('get: ' + JSON.stringify(contacto2));

contacto1.set( contacto2 );
contacto1.set({marcado: 0});
// Output: {id:3, name:'Juan 3', marcado: 0}
Ti.API.debug('set: ' + JSON.stringify(contacto1));

// elimino el contacto 2
contacto2.destroy();

contacto1.save();   
contactos.fetch();

// Output (last object): [{...},{...},{...},{...},{id:3, name:'Juan 3', marcado: 0}]    
Ti.API.debug('despues de save: ' + JSON.stringify( JSON.stringify( contactos ) ));
Run Code Online (Sandbox Code Playgroud)

但是: - 第一个选项可以很好地保存新模型(不存在于集合中).

更新模型应该是一项非常简单的任务,但我无法做到.

对可能出现的问题有什么看法?

谢谢.

J. Pablo.

dam*_*ian 5

我遇到了同样的问题,这就是我修复它的方法:当你定义模型时,你必须明确地声明主键,如下所示:

exports.definition = {
config: {
    columns: {
        "id": "INTEGER PRIMARY KEY",
        "name": "TEXT",
        "marcado": "INTEGER"
    },
    adapter: {
        type: "sql",
        idAttribute: "id"
    }
},
    extendModel: function(Model) {
    _.extend(Model.prototype, {
        idAttribute: "id",
   ...
        return Model;
    }
};
Run Code Online (Sandbox Code Playgroud)

声明idAttribute是不够的.