我是钛和合金的新手,但在使用大约 3 个月后,我对其中的大部分感到满意。然而,我对合金模型还很陌生,我遇到了一个我无法弄清楚的错误。以下是我的模型和 Controller 的设置方式(不包括 View .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 | Controller
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时出错:表orders没有名为reseller_name:的列,编译时:REPLACE INTO Orders (id_Orders,reseller_name,reseller_invoice_account) VALUES (?,?,?);
Network 是一个库,它向网络服务器发送 SOAP 请求并使用soap2json.js 将其转换为 JSON。我确信网络部分没有问题。 我很确定返回的 JSON 对象“a”有错误。我可以单独输出所有值并在其他地方使用它 - 当我尝试将模型保存到集合中时会发生错误。
我错过了什么吗?
最佳答案
当您在第一次运行应用程序后修改模型的定义时,通常会发生这种情况,可能是您在此之后添加了 reseller_name 列。您必须重新生成表。
当这种情况发生在我身上并且我正处于开发阶段时,我通常会在 Alloy.js 文件的开头删除表格。试试这个:
var db = Ti.Database.open ('_alloy_');
db.Execute ('DROP TABLE IF EXISTS orders;');
db.close ();
显然,这会破坏表中的所有数据,但是当您第一次实例化集合或模型时,Alloy 会使用新定义重新生成表。
如果您需要保留数据,处理这些更改的正确方法是使用 migrations
关于backbone.js - 钛合金型号- table 无立柱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20565441/