这是以两种不同方式编写的合金控制器的代码。虽然两者的作用相同,哪一个可能是最佳实践?
controller.js的示例1:
var currentState = true;
exports.getState = function(){
return currentState;
}
controller.js的示例2:
[textView addObserver:self
forKeyPath:@"text"
options:NSKeyValueObservingOptionNew
context:nil];
答案 0 :(得分:1)
Titanium基于CommonJS框架。 exports变量是一个特殊变量,通常用于公开类对象中的公共API。因此,当您想在MyModule.js类上公开doSomething()方法时,您将使用如下的exports变量:
exports.doSomething() = function(args) {
//Some really cool method here
};
然后使用
引用该类var myModule = require('MyModule');
myModule.doSomething();
但是,在引用视图对象时,引用它的典型方法是使用$。捷径。您可以在官方文档中看到他们更喜欢这种方法。
http://docs.appcelerator.com/platform/latest/#!/guide/Alloy_XML_Markup
答案 1 :(得分:0)
$
变量包含对控制器实例的引用。它还包含对所有索引视图的一些引用(理解,您在xml标记中为其提供索引的视图)。
两种方式都严格等同,因为在编译期间,Alloy会将exports
的内容与$
中引用的控制器合并。将它们直接添加到实例中不会改变事物。
无论如何,开发人员习惯将公共API视为通过特殊变量exports
导出的函数集;因此,我建议以干净清晰的方式继续使用它(例如,在模块范围内定义函数,并仅在控制器的末尾或开头公开它们)。
function myFunction1 () { }
function myFunction2 () { }
function myFunction3 () { }
exports.myFunction1 = myFunction1;
exports.myFunction3 = myFunction3;
因此,对于潜入源代码的人来说,您的API非常清晰。 (强烈建议使用readMe文件:))。