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

Difficulty adding controller-less view to another view

我在自己的视图中创建了一个 activity 指示器,这样我就可以将其放入我的每个视图随附的 tables 中,这些 tables 是搜索功能的一部分我的应用程序中的属性。

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 是一个从绑定到状态 window 的 "open" 事件侦听器调用的函数。 pullStates() 使用 HTTP 客户端将 table 中的状态列表填充到 select 中。该函数需要注意的重要部分是,在它的 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 来处理该视图。是否还有其他我遗漏的东西或者设置有误?

这是你的问题:

$.activityIndicator.show();

应该是

$.activityIndicator.activityIndicator.show();

第一个 activityIndicator 指的是所需的无控制器视图:

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

第二个 activityIndicator 是您访问文件 activIndic.xml

中定义的 activityIndi​​cator

这是具有函数 show

的对象

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

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

然后,在您的 states.js 中直接调用 $.activityIndicator.show();$.activityIndicator.hide();