你好Titanium开发者。
我是Titanium Alloy开发的新手,但不是Javascript。我在Titanium Alloy应用程序中遇到了SQLite更新查询的问题并寻求帮助。
我的控制器js文件如下。
var items = [];
var db = Ti.Database.open('listDB');
//db.file.setRemoteBackup(false);
db.execute('CREATE TABLE IF NOT EXISTS liststatus(id INTEGER PRIMARY KEY, name TEXT, value INTEGER);');
var my_result_set = db.execute('SELECT * FROM liststatus');
var records = my_result_set.rowCount;
Ti.API.info(records);
if(records == 0){
db.execute('INSERT INTO liststatus(id, name, value) VALUES (1, "Node #1", 0)');
db.execute('INSERT INTO liststatus(id, name, value) VALUES (2, "Node #2", 0)');
db.execute('INSERT INTO liststatus(id, name, value) VALUES (3, "Node #3", 1)');
}
var rows = db.execute('SELECT * FROM liststatus');
while (rows.isValidRow())
{
if(rows.fieldByName('value') == 1){
var truVal = "true";
}else{
var truVal = "false";
}
items.push({"id": rows.fieldByName('id'), "label":{text: rows.fieldByName('name')},"switchVal":{value: truVal}, "template": "title_only"});
rows.next();
};
$.dynamicListView.sections[0].setItems(items);
var itemsUpdate = [];
function outputState(e){
var section = $.dynamicListView.sections[e.sectionIndex];
var item = section.getItemAt(e.itemIndex);
//itemsUpdate.push({"id": item.id, "value": e.value});
var val = e.value;
var itemId = item.id;
//db.execute('UPDATE liststatus SET value=? WHERE id=?',1,1);
db.execute('UPDATE liststatus SET value=? WHERE id=?',val,itemId);
}
rows.close();
db.close();
我的观点xml看起来像这样。
<Alloy>
<Window class="container" id="dbWin">
<!--<Toolbar top="0" platform="ios">
<Items>
<Button id="button" onClick="saveData">Save</Button>
</Items>
</Toolbar>-->
<ListView id="dynamicListView">
<Templates>
<ItemTemplate name="title_only">
<View layout="horizontal">
<Label class="label" bindId="label"/>
<Switch bindId="switchVal" onChange="outputState" />
</View>
</ItemTemplate>
</Templates>
<ListSection/>
</ListView>
</Window>
</Alloy>
问题是当切换切换更改时,更新查询根本不会触发。我该如何解决这个问题?我在这里做的不是什么?非常感谢您的帮助!
问候。
Shreerang
答案 0 :(得分:1)
我不知道为什么它不会被触发,但我会先将Ti.Api.info添加到该函数中,然后查看它是否被调用。
现在,您的代码中存在一些基本错误(与javascript而非Titanium相关的错误)可能会导致问题和内存泄漏。
你应该做的是在函数范围内创建,打开和关闭数据库的新实例。
希望有所帮助