如何在Titanium中操作选项卡式视图并添加SQLite内容?

时间:2015-08-02 20:10:48

标签: javascript android xml sqlite titanium

  

概述

我对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);

  

澄清......

我理解错误的含义,但不明白为什么会被抛出。

  1. 为什么我无法访问index.js中的wiseWords.xml视图,即使在{/ 1}}标记的index.xml中引用了wiseWords?

1 个答案:

答案 0 :(得分:0)

  

<强>澄清

您正在使用id wiseWordsWindow调用窗口的添加方法。但根据您的代码,您使用require在index.xml文件中使用此控制器。所以你无法直接访问wiseWords控制器的元素。所以你可以尝试在wiseWords控制器中创建方法,可以从索引文件中访问,然后将child添加到wiseWordsWindow。有两种方法可以做到这一点。

解决方案1 ​​

  

守则

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;

解决方案2

在此解决方案中,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();

希望这会有所帮助