我试图模仿Appcelerator钛合金中的活动指示器模块。
它工作正常,但我不明白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不是一个函数。和隐藏功能相同。
我不明白的是,这两行如何使隐藏和显示功能可访问。以及这两行可能等效的代码。
$在这里指的是什么?
浏览完其他小部件后,我得到一个约定,如果您需要在View中使用小部件而不是Controller,则可以使用$ .variable将其设置为对外部世界可见。与module.exports相同,将其设置为对外界可见。
如果我错了,请纠正我。
最佳答案
$.hide = hide;
$
读取名为$
的变量的值。.hide
(假定该值是一个对象,否则将是一个错误)访问称为hide
的属性。= hide
接受局部hide
变量的值(这是同名的函数,因为它是使用函数声明创建的,因此被提升),并将其分配给该属性。下一行以相同的方式工作,只是名称不同。
我不明白的是,这两行如何使隐藏和显示功能可访问。
要么:
代码第一位中
$
变量的值的对象与后面$.loadIndicator
的值的对象相同。其他一些代码再次复制了这些功能
以及这两行可能等效的代码。
为什么您需要执行相同操作的不同代码?
关于javascript - 不了解钛合金 Controller 中$ .variableName = functionName的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47453271/