概述
我对Titanium很新,我决定最终开始使用SQLite和一些新的UI功能。我选择了TabGroup,因为我觉得这是最好的选择。但是,我有一些问题。我试图简单地得到一些已经插入到表中的引号(经过测试和工作,我提醒它们并且它起作用)并且我希望在wiseWords选项卡中显示它们,以便用户可以查看它们。
守则
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>
错误
符文时错误
位置:合金/控制器/ index.js
未捕获的TypeError:无法调用方法&#39;添加&#39;未定义。
来源:$ .wiseWordsWindow.add(addQuote);
澄清......
我理解错误的含义,但不明白为什么会被抛出。
答案 0 :(得分:0)
<强>澄清强>
您正在使用id wiseWordsWindow调用窗口的添加方法。但根据您的代码,您使用require在index.xml文件中使用此控制器。所以你无法直接访问wiseWords控制器的元素。所以你可以尝试在wiseWords控制器中创建方法,可以从索引文件中访问,然后将child添加到wiseWordsWindow。有两种方法可以做到这一点。
守则
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 (在此文件更改方法中调用添加到我们将在我们的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 (在此控制器中添加 addQuote 方法并将其分配给我们的控制器)
function addQuote(_quote){
$.wiseWordsWindow.add(_quote);
}
exports.addQuote = addQuote;
在此解决方案中,index.xml的代码与第一个解决方案相同。 更改将在index.js和wiseWords.js。
守则
wiseWords.js (在此文件中添加以下行)
exports.myWiseWordsWin = $.wiseWordsWindow;
index.js (现在我们可以使用为窗口创建的引用从索引文件访问我们的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();
希望这会有所帮助