难以将无控制器视图添加到另一个视图
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
中定义的 activityIndicator
这是具有函数 show
的对象
在你的activIndic.js中公开了最重要的方法,
$.show = function(status){
$.activityIndicator.show();
}
$.hide = function(status){
$.activityIndicator.hide();
}
然后,在您的 states.js 中直接调用 $.activityIndicator.show();
或 $.activityIndicator.hide();
我在自己的视图中创建了一个 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
这是具有函数 show
在你的activIndic.js中公开了最重要的方法,
$.show = function(status){
$.activityIndicator.show();
}
$.hide = function(status){
$.activityIndicator.hide();
}
然后,在您的 states.js 中直接调用 $.activityIndicator.show();
或 $.activityIndicator.hide();