不理解 $.variableName = functionName in Titanium Alloy Controller 的含义
Did not understand meaning of $.variableName = functionName in Titanium Alloy Controller
我试图模仿 Appcelerator Titanium Alloy 中的 activity 指标模块。
它工作正常,但我不明白 2 行的工作。
activityIndicator.js
$.hide = hide; // <= What does these two lines
$.show = show; // <= means. How Iam able to access hide and show functions in dashboard.js controller directly?
function hide () {
$.loadingOverlay.hide();
$.loadingIndicator.hide();
}
function show () {
$.loadingOverlay.show();
$.loadingIndicator.show();
}
(function init(){
Titanium.API.trace("[activityIndicator] >> [init]");
})();
activityIndicator.xml
<Alloy>
<View id="loadingOverlay" visible="false" zIndex="1">
<ActivityIndicator id="loadingIndicator"/>
</View>
</Alloy>
我在另一个视图中需要此文件,即 dashboard.xml
并且在 dashboard.js 控制器中我使用 $.loadIndicator.show() 和 $.loadIndicator.hide() 函数。
dashboard.js
//just the function related to loadIndicator
function serviceFailed(e) {
$.loadIndicator.hide(); //hide function works well.
var errorMessage = Ti.UI.createLabel({
text : "Error loading data!",
color : "red"
});
$.listContainer.add(errorMessage);
alert("Failed:" + e.toString());
}
////just the function related to loadIndicator
function showList() {
$.loadIndicator.show(); //this also works fine.
serviceUtil.doUtilServiceCall(function(resp) {
populateList(resp);
ReceivedData = resp;
Ti.API.info('Data is set to response received.');
}, serviceFailed);
}
如果我注释掉 activityIndicator.js
中的前两行
$.hide = hide;
$.show = show;
然后显示 show loadIndicator.show 不是函数。隐藏功能也一样。
我不明白这两行是如何使隐藏和显示功能变得可访问的。这两行可能的等效代码是什么。
这里的$指的是什么?
After going through other widgets I get the convention that, if you require a widget in View instead of Controller then using $.variable sets it as visible to outside world. Same way as module.exports sets it visible to outside world.
如有错误请指正
$.hide = hide;
$
读取名为 $
.
的变量的值
.hide
(假设该值是一个对象,否则会出错)访问名为 hide
.
的 属性
= hide
取局部 hide
变量的值(这是同名函数,hoisted 因为它是使用 函数声明) 并将其分配给 属性.
下一行的工作方式相同,只是名称不同。
What I do not understand is how those two lines are making hide and show function accessible.
或者:
- 第一段代码中
$
变量值的对象与后面 $.loadIndicator
值的对象相同。
- 其他一些代码又复制了那些函数
And what can be possible equivalent code of those two lines.
为什么你需要不同的代码来做同样的事情?
Found Answer on Appceleraor's wiki : creating widgets
小部件控制器中的所有方法都是私有的,除非您在方法前加上 $,这使得 Alloy 项目和其他小部件可以访问它。例如,如果在小部件控制器中定义了以下代码:
$.init = function (args) {
// Button object with id=button
$.button.title = args.title || 'Si';
$.button.color = args.color || 'black';
// global variable
message = args.message || 'Hola mundo';
}
然后,在 Alloy 项目中,调用以 Alloy 项目视图中指定的小部件 ID 为前缀的 init -- 在本例中,ID 为 foo:
$.foo.init({title:'Yes', color:'gray', message:'I pity the foo.'});
我试图模仿 Appcelerator Titanium Alloy 中的 activity 指标模块。 它工作正常,但我不明白 2 行的工作。
activityIndicator.js
$.hide = hide; // <= What does these two lines
$.show = show; // <= means. How Iam able to access hide and show functions in dashboard.js controller directly?
function hide () {
$.loadingOverlay.hide();
$.loadingIndicator.hide();
}
function show () {
$.loadingOverlay.show();
$.loadingIndicator.show();
}
(function init(){
Titanium.API.trace("[activityIndicator] >> [init]");
})();
activityIndicator.xml
<Alloy>
<View id="loadingOverlay" visible="false" zIndex="1">
<ActivityIndicator id="loadingIndicator"/>
</View>
</Alloy>
我在另一个视图中需要此文件,即 dashboard.xml
并且在 dashboard.js 控制器中我使用 $.loadIndicator.show() 和 $.loadIndicator.hide() 函数。
dashboard.js
//just the function related to loadIndicator
function serviceFailed(e) {
$.loadIndicator.hide(); //hide function works well.
var errorMessage = Ti.UI.createLabel({
text : "Error loading data!",
color : "red"
});
$.listContainer.add(errorMessage);
alert("Failed:" + e.toString());
}
////just the function related to loadIndicator
function showList() {
$.loadIndicator.show(); //this also works fine.
serviceUtil.doUtilServiceCall(function(resp) {
populateList(resp);
ReceivedData = resp;
Ti.API.info('Data is set to response received.');
}, serviceFailed);
}
如果我注释掉 activityIndicator.js
中的前两行$.hide = hide;
$.show = show;
然后显示 show loadIndicator.show 不是函数。隐藏功能也一样。
我不明白这两行是如何使隐藏和显示功能变得可访问的。这两行可能的等效代码是什么。
这里的$指的是什么?
After going through other widgets I get the convention that, if you require a widget in View instead of Controller then using $.variable sets it as visible to outside world. Same way as module.exports sets it visible to outside world.
如有错误请指正
$.hide = hide;
$
读取名为 $
.
.hide
(假设该值是一个对象,否则会出错)访问名为 hide
.
= hide
取局部 hide
变量的值(这是同名函数,hoisted 因为它是使用 函数声明) 并将其分配给 属性.
下一行的工作方式相同,只是名称不同。
What I do not understand is how those two lines are making hide and show function accessible.
或者:
- 第一段代码中
$
变量值的对象与后面$.loadIndicator
值的对象相同。 - 其他一些代码又复制了那些函数
And what can be possible equivalent code of those two lines.
为什么你需要不同的代码来做同样的事情?
Found Answer on Appceleraor's wiki : creating widgets
小部件控制器中的所有方法都是私有的,除非您在方法前加上 $,这使得 Alloy 项目和其他小部件可以访问它。例如,如果在小部件控制器中定义了以下代码:
$.init = function (args) {
// Button object with id=button
$.button.title = args.title || 'Si';
$.button.color = args.color || 'black';
// global variable
message = args.message || 'Hola mundo';
}
然后,在 Alloy 项目中,调用以 Alloy 项目视图中指定的小部件 ID 为前缀的 init -- 在本例中,ID 为 foo:
$.foo.init({title:'Yes', color:'gray', message:'I pity the foo.'});