不理解 $.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.'});