如何在 Titanium 中操作选项卡式视图并添加 SQLite 内容?
How to manipulate a tabbed view in Titanium and add SQLite content?
The Overview
我是 Titanium 的新手,我决定最终开始使用 SQLite 和一些新的 UI 功能。我选择了 TabGroup,因为我觉得那是最好的选择。但是我有一些问题。我试图简单地获取一些已插入 table 的引号(经过测试和工作,我提醒他们并且它有效)并且我希望将它们显示在 wiseWords 选项卡中,以便用户可以查看它们.
The Code
index.xml
<Alloy id="index">
<TabGroup>
<Require src="home"></Require>
<Require src="wiseWords"></Require>
<Require src="settings"></Require>
</TabGroup>
</Alloy>
index.js
$.index.open();
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWindow.add(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
wiseWords.xml
<Alloy>
<Tab id="wiseWordsTab" title="Wise Words">
<Window id="wiseWordsWindow" class="container" title="Wise Words">
</Window>
</Tab>
</Alloy>
The Error(s)
运行时错误
位置:alloy/controllers/index.js
未捕获类型错误:无法调用未定义的方法 'add'。
来源:$.wiseWordsWindow.add(addQuote);
To Clarify...
我明白错误的含义,但不明白为什么会抛出它。
- 为什么我无法在 index.js 中访问 wiseWords.xml 的视图,即使在 index.xml 中通过
<Require>
标记引用了 wiseWords?
Clarification
您正在使用 ID wiseWordsWindow 调用 window 的 add 方法。但是根据您的代码,您在使用 require 的 index.xml 文件中使用了这个控制器。所以你不能直接访问 wiseWords 控制器的元素。所以你可以尝试在可以从索引文件访问的 wiseWords 控制器中创建方法,然后将子添加到 wiseWordsWindow。有两种方法可以做到这一点。
解决方案 1
The Code
index.xml(在此文件中将 id 提供给 wiseWords)
<Alloy id="index">
<TabGroup>
<Require src="home"></Require>
<Require id="wiseWordsWin" src="wiseWords"></Require>
<Require src="settings"></Require>
</TabGroup>
</Alloy>
index.js(在此文件中更改方法调用 add 到我们将在 wiseWords 控制器中创建的方法)
将 $.wiseWordsWindow.add(addQuote); 行更改为以下内容。
$.wiseWordsWin.addQuote(addQuote);
更新代码 index.js
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWin.addQuote(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
$.index.open();
wiseWords(保持文件原样)
wiseWords.js(在这个controller中添加addQuote方法赋值给我们的controller)
function addQuote(_quote){
$.wiseWordsWindow.add(_quote);
}
exports.addQuote = addQuote;
解决方案 2
在此解决方案中,index.xml 的代码与第一个解决方案相同。
更改将在 index.js 和 wiseWords.js.
中进行
The Code
wiseWords.js(向该文件添加以下行)
exports.myWiseWordsWin = $.wiseWordsWindow;
index.js(现在我们可以使用为输出 window 创建的引用从索引文件访问我们的 wiseWordsWindow)
将 $.wiseWordsWindow.add(addQuote); 行更改为以下内容。
$.wiseWordsWin.myWiseWordsWin.add(addQuote);
更新代码 index.js
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWin.myWiseWordsWin.add(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
$.index.open();
希望这会有所帮助
The Overview
我是 Titanium 的新手,我决定最终开始使用 SQLite 和一些新的 UI 功能。我选择了 TabGroup,因为我觉得那是最好的选择。但是我有一些问题。我试图简单地获取一些已插入 table 的引号(经过测试和工作,我提醒他们并且它有效)并且我希望将它们显示在 wiseWords 选项卡中,以便用户可以查看它们.
The Code
index.xml
<Alloy id="index">
<TabGroup>
<Require src="home"></Require>
<Require src="wiseWords"></Require>
<Require src="settings"></Require>
</TabGroup>
</Alloy>
index.js
$.index.open();
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWindow.add(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
wiseWords.xml
<Alloy>
<Tab id="wiseWordsTab" title="Wise Words">
<Window id="wiseWordsWindow" class="container" title="Wise Words">
</Window>
</Tab>
</Alloy>
The Error(s)
运行时错误
位置:alloy/controllers/index.js
未捕获类型错误:无法调用未定义的方法 'add'。
来源:$.wiseWordsWindow.add(addQuote);
To Clarify...
我明白错误的含义,但不明白为什么会抛出它。
- 为什么我无法在 index.js 中访问 wiseWords.xml 的视图,即使在 index.xml 中通过
<Require>
标记引用了 wiseWords?
Clarification
您正在使用 ID wiseWordsWindow 调用 window 的 add 方法。但是根据您的代码,您在使用 require 的 index.xml 文件中使用了这个控制器。所以你不能直接访问 wiseWords 控制器的元素。所以你可以尝试在可以从索引文件访问的 wiseWords 控制器中创建方法,然后将子添加到 wiseWordsWindow。有两种方法可以做到这一点。
解决方案 1
The Code
index.xml(在此文件中将 id 提供给 wiseWords)
<Alloy id="index">
<TabGroup>
<Require src="home"></Require>
<Require id="wiseWordsWin" src="wiseWords"></Require>
<Require src="settings"></Require>
</TabGroup>
</Alloy>
index.js(在此文件中更改方法调用 add 到我们将在 wiseWords 控制器中创建的方法)
将 $.wiseWordsWindow.add(addQuote); 行更改为以下内容。
$.wiseWordsWin.addQuote(addQuote);
更新代码 index.js
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWin.addQuote(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
$.index.open();
wiseWords(保持文件原样)
wiseWords.js(在这个controller中添加addQuote方法赋值给我们的controller)
function addQuote(_quote){
$.wiseWordsWindow.add(_quote);
}
exports.addQuote = addQuote;
解决方案 2
在此解决方案中,index.xml 的代码与第一个解决方案相同。 更改将在 index.js 和 wiseWords.js.
中进行The Code
wiseWords.js(向该文件添加以下行)
exports.myWiseWordsWin = $.wiseWordsWindow;
index.js(现在我们可以使用为输出 window 创建的引用从索引文件访问我们的 wiseWordsWindow)
将 $.wiseWordsWindow.add(addQuote); 行更改为以下内容。
$.wiseWordsWin.myWiseWordsWin.add(addQuote);
更新代码 index.js
/** Create and populate the wise words table. **/
Alloy.Globals.createRequiredTables();
var selectWiseWordsSQL = "SELECT * FROM wise_words";
var selectWiseWords = Titanium.App.db.execute(selectWiseWordsSQL);
while (selectWiseWords.isValidRow()) {
/** Create labels for each quote. **/
var addQuote = Titanium.UI.createLabel({
text : selectWiseWords.fieldByName("saying") + " - " + selectWiseWords.fieldByName("quoted_by"),
});
/** Add quote to window (available in wiseWords.xml). **/
$.wiseWordsWin.myWiseWordsWin.add(addQuote);
selectWiseWords.next();
}
selectWiseWords.close();
$.index.open();
希望这会有所帮助