我是Titanium和Alloy的新手,但在使用约3个月后,我觉得大部分都很舒服。然而,我对Alloy中的模型很新,我遇到了一个我无法弄清楚的错误。以下是我的模型和控制器的设置方式(不包括视图.XML文件,因为它无关紧要)
Orders.js |型号
exports.definition = {
config : {
columns : {
"id_Orders" : "INTEGER PRIMARY KEY AUTOINCREMENT",
"reseller_name" : "TEXT",
"reseller_invoice_account" : "TEXT"
},
adapter : {
type : "sql",
collection_name : "orders",
idAttribute: "id_Orders"
}
}
Orders.js |控制器
var network = require("network");
network.soapRequest("<prem:getResellersRequest/>", function(a) {
Ti.API.info("The Soap Server Returned: " + JSON.stringify(a));
Ti.API.info("There are " + a.reseller_name.length + " returned records.");
for (var i = 0; a.reseller_name.length > i; i++) {
var listModel = Alloy.createModel("orders", {
reseller_name: a.reseller_name[i],
reseller_invoice_account: a.reseller_invoice_account[i]
});
listModel.save();
Alloy.Collections.orders.fetch();
}
});
Alloy.Collections.orders.fetch();
错误发生在listModel.save()行:
执行sql时出错:table orders没有名为reseller_name:的列,在编译时:REPLACE INTO orders(id_Orders,reseller_name,reseller_invoice_account)VALUES(?,?,?);
Network是一个lib,它将SOAP请求发送到Web服务器并使用soap2json.js将其转换为JSON。我确信网络部分没有任何问题。 我很确定返回的JSON对象'a'有问题。我可以单独输出所有值并在其他地方使用它 - 当我试图将模型保存到集合时会发生错误。
我错过了什么吗?
答案 0 :(得分:4)
在第一次运行应用程序后修改模型定义时通常会发生这种情况,可能是您之后添加了reseller_name列。您必须重新生成表格。
当它发生在我身上并且我处于开发阶段时,我通常会在alloy.js文件的开头执行表格的DROP。试试这个:
var db = Ti.Database.open ('_alloy_');
db.Execute ('DROP TABLE IF EXISTS orders;');
db.close ();
显然,这会破坏表格中的所有数据,但是当您第一次实现集合或模型时,Alloy会使用新定义重新生成表格。
如果您需要保留数据,处理这些更改的正确方法是使用migrations