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.
我遇到了同样的问题,这就是我修复它的方法:当你定义模型时,你必须明确地声明主键,如下所示:
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是不够的.