难以将无控制器视图添加到另一个视图

时间:2017-03-10 17:33:13

标签: android xml view appcelerator-titanium activity-indicator

我有一个活动指示器,我在自己的视图中制作,以便我可以将它放在我的每个视图中。附表是我应用中属性搜索功能的一部分。

activIndic.xml

    <Alloy>
<ActivityIndicator id="activityIndicator" message="Loading..." indicatorColor="Alloy.CFG.design.colors.hudBlue"
    style="Titanium.UI.ActivityIndicatorStyle.BIG_DARK"
    >
</ActivityIndicator>

states.xml

    <Alloy>
<Window id="winState" class="container vgroup" title="Search | States" >
    <Label text="Click a state to continue." class="searchWinHint" id="hint"></Label>
    <Require id="activityIndicator" src="activIndic" type="" ></Require>
    <TableView id="stateList" class="tableView-search">
    </TableView>
</Window>

states.js - searchState()

    function searchState(){
$.activityIndicator.show();
pullStates();
$.stateList.addEventListener("click", function(e){
    //Create global state abbreviation name
    args.stateAbbr = e.row.children[1].text;
    Alloy.createController("search_tab/counties", args).getView().open();
    });
$.winState.add($.stateList);}

searchState是一个从&#34; open&#34;事件监听器绑定到状态窗口。 pullStates()使用HTTP客户端来填充表中的状态列表以供选择。注意该函数的重要部分是,在它结束时调用onload函数$.activityIndicator.hide(),这样一旦数据加载,指示就会消失。

但是,我收到了错误

    [ERROR] :  TiExceptionHandler: (main) [951,2005] ----- Titanium Javascript Runtime Error -----[ERROR] :  TiExceptionHandler: (main) [1,2006] -In /alloy/controllers/search_tab/states.js:1,336[ERROR] :  TiExceptionHandler: (main) [0,2006] - Message: Uncaught TypeError: i.activityIndicator.show is not a function

我不明白错误发生的原因。我的印象是,如果通过<Require>标记向XML添加了一个视图,那么states.js控制器应该能够通过引用它的id来处理该视图。还有其他我不知道的东西,或者某些设置错误吗?

2 个答案:

答案 0 :(得分:0)

这是你的问题:

$.activityIndicator.show();

应该是

$.activityIndicator.activityIndicator.show();

第一个activityIndicator指的是所需的controlerlessView:

<Require id="activityIndicator" src="activIndic" type="" ></Require>

,第二个activityIndicator是您访问文件activIndic.xml中定义的activityIndi​​cator

这是具有函数show

的对象

答案 1 :(得分:0)

activIndic.js 中公开最重要的方法,

$.show = function(status){
    $.activityIndicator.show();
}
$.hide = function(status){
    $.activityIndicator.hide();
}

然后,在 states.js 中,您可以直接致电$.activityIndicator.show();$.activityIndicator.hide();