2013-08-05 4 views
1

Я пишу яваскрипт рамки, используя шаблон модуля, который выглядит следующим образом:Split шаблон модуля Javascript кода в файлы

var EF = (function(doc) { 

    // Main public object 
    var e = { 
     version: "1.0.0", 
     doc: doc, 
     log: true 
    }; 

    // Private methods 

    var method1 = function(el) { 
     <some code> 
    } 

    var method2 = function(el) { 
     <some code> 
    } 

    var method3 = function(el) { 
     <some code> 
    } 


    // PUBLIC METHODS ASSIGNMENT 

    e.method1 = method1; 
    e.method2 = method2; 
    e.method3 = method3; 

    return e; 

}(document)); 

Теперь я решил, что я должен переместить некоторые методы в отдельный файл. Во время разработки я тогда загружал два файла один за другим в файл HTML, а для развертывания я бы объединил их в один файл.

Каков правильный способ переместить часть методов в отдельные файлы, сохраняющие структуру кода, который я использую?

Я видел следующее предложение в одном из ответов на StackOverflow:

var MODULE = (function (my) { 
    var privateToThisFile = "something"; 

    // add capabilities... 

    my.publicProperty = "something"; 

    return my; 
}(MODULE || {})); 

Это выглядит почти как то, что мне нужно, но это показывает частные методы для файла и для модуля. Но мне нужны частные методы для модуля и лобковые методы для модуля.

Какие у вас есть предложения?

+3

Все функции, которые нуждаются в доступе к тем же частным методам, должны находиться в одном файле сценария. – Bergi

+0

Это потому, что они не частные методы, а локальные переменные, ссылающиеся на объекты-функции, метафора сразу же ломается. – Esailija

+0

см. Возможный дубликат. [Как я могу делиться данными между частями между двумя файлами в узле?] (Http: // stackoverflow. com/questions/17334081/how-can-i-share-module-private-data-between-2-files-in-node) для возможного шаблона, если просто [разделение на более мелкие модули] (http://stackoverflow.com/a/12483424/1048572) не подходит для вас – Bergi

ответ

1

Я не уверен, что именно вы хотите, но я думаю, вы хотите получить доступ к частной функции через объект модуля. По сути, это общедоступный указатель на частную собственность.

Позвольте мне знать, если я могу вам помочь. Пример проблемы с jsFiddle будет отличным.

var myRevealingModule = function() { 

    var privateCounter = 0; 

    function privateFunction() { 
     privateCounter++; 
    } 

    function publicFunction() { 
     publicIncrement(); 
    } 

    function publicIncrement() { 
     privateFunction(); 
    } 

    function publicGetCount(){ 
     return privateCounter; 
    } 

    // Reveal public pointers to 
    // private functions and properties   

    return { 
     start: publicFunction, 
     increment: publicIncrement, 
     count: publicGetCount 
    }; 

}(); 

myRevealingModule.start(); 
+0

Спасибо. Кажется, это лучшее, что я могу сделать ... – BartoNaz

Смежные вопросы