2013-12-11 64 views
2

我正在嘗試使用合金來更新Titanium中集合中的模型。無法使用合金在Titanium Appcelerator中更新模型

這個代碼不工作:

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))); 

雖然這是工作:

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))); 

但是: - 第一種選擇是工作的罰款保存新車型(不收集現有的)。

更新模型應該是一項非常簡單的任務,但我無法做到。

有關可能的問題的任何想法?

謝謝。

J.Pablo。

+0

嘿,我面臨同樣的問題,你能解決這個問題嗎? – Damian

回答

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; 
    } 
}; 

這是不夠申報idAttribute。

相關問題