2015-06-09 1 views
0

вот код контроллера сплава, написанный двумя разными способами. Хотя оба работают одинаково, какой из них может быть лучшей практикой?

пример 1 из controller.js:

var currentState = true; 
$.getState = function(){ 
    return currentState; 
} 

Пример 2 controller.js:

var currentState = true; 
exports.getState = function(){ 
    return currentState; 
} 

ответ

1

титана основан на структуре CommonJS. Переменная экспорта - это специальная переменная, обычно используемая для предоставления публичного API в объекте класса. Так что, если вы хотите, чтобы выставить метод DoSomething() в классе MyModule.js вы бы использовать переменный экспорт, как это:

exports.doSomething() = function(args) { 
    //Some really cool method here 
}; 

Затем ссылаться на этот класс, используя

var myModule = require('MyModule'); 
myModule.doSomething(); 

Однако при ссылке на view object, типичный способ ссылки ссылается на $. ярлык. Вы можете видеть, что они предпочитают этот метод в официальной документации.

http://docs.appcelerator.com/platform/latest/#!/guide/Alloy_XML_Markup

0

$ переменная содержит ссылку на экземпляр контроллера. Он также содержит некоторые ссылки на все индексированные представления (понимать, представления, для которых вы указали индекс в вашей разметке xml).

Оба способа строго эквивалентна, как во время компиляции, Alloy сольется содержание exports с контроллером, указанным в $. Добавление их непосредственно в экземпляр ничего не изменит.

Бесполезно, разработчики привыкли видеть публичный API как набор функций, экспортируемых с помощью специальной переменной exports; Таким образом, я рекомендую использовать его в чистом и понятном виде (например, определяя свои функции в области вашего модуля и выставлять их только в конце или в начале вашего контроллера).

function myFunction1() { } 
function myFunction2() { } 
function myFunction3() { } 


exports.myFunction1 = myFunction1; 
exports.myFunction3 = myFunction3; 

Таким образом, ваш API вполне понятен для людей, погружающихся в ваш исходный код. (Файл readMe также настоятельно рекомендуется :)).

+0

благодарит за это четкое объяснение –