2

Я пишу различные файлы в JavaScript Модуль Patern так:модуль JavaScript шаблон файлов конкатенацию в один файл и использовать их функции

файл 1.js

var Module = (function (module) { 

    module.function = function() { 

    console.log(this.thirdFunction) // This is my issue. I cannot access the function from the third file because it is concatenated in a way that the function still not exist. 

    }; 

    return module; 

}(Module || {})); 

некоторые папка/файл 2.js

var Module = (function (module) { 

    module.somethingElse = function() { 


    }; 

    return module; 

}(Module || {})); 

независимо/файл 3.js

var Module = (function (module) { 

    module.thirdFunction = function() { 


    }; 

}(Module || {})); 

Я положил все эти файлы в разных каталогах, имена в разное время. Затем я использую инструмент конкатенации, чтобы иметь один файл, а затем я использую его в своем html-файле. Но я столкнулся с проблемой, которую я не могу решить.

Чтобы все это работало, я должен включить их определенным образом и заказать функции вызова из того, что мне нужно, и переупорядочить файлы, когда что-то еще не определено/создано в возвращаемом конечном объекте. Если у меня будет 100 файлов и папок, это снова будет проблемой для меня.

Я понимаю это право: http://gruntjs.com/configuring-tasks#globbing-patterns , что у меня есть возможность вручную заказывать файлы, папки и все в моих задачах для ворчания?

Я не хочу использовать инструменты AMD, просто файлы JavaScript и некоторый подход к взлому требований к заказу. Если для вас нет какой-либо легкой идеи, я бы попробовал инструменты AMD, такие как require.js, но я не уверен, что эти инструменты помогут справиться с этой хромой проблемой. Я был бы признателен за некоторые инструменты для ворчания, некоторые условные обозначения имен файлов и папок, все, что не заставило бы меня устанавливать все больше и больше инструментов. Спасибо заранее!

Другое дело, что меня беспокоит следующее:

Если я хочу, чтобы изолировать код, но я не должен возвращать свойство объекта в конечном объекте, это хорошо, чтобы сделать что-то вроде этого:

файл 4.js

var Module = (function (module) { 

var someThing = Module.somethingElse() // from file 2.js 
and then using someThing here for clicking, DOM rendering, etc, etc 

}(Module || {})); 

это глупо придерживаться тех же var Module конвенции для файлов, где я на самом деле ничего не возвращают? Я просто думаю о том, как избежать названия объекта и снова использовать this

ответ

0

Действительно, инструменты AMD были созданы именно для этой проблемы. Однако вы можете обойти это в некоторой степени с ворчанием. Вы могли бы просто упорядочить файлы, которые нужно сначала перенести в папку, и перечислить их в том порядке, который вы хотите, а затем иметь другую папку, содержащую все файлы, порядок которых не имеет значения, включая все.

'js/main/First.js', 
'js/main/Second.js', 
'js/rest/*.js' 

Независимо от того, что вы выбрали для этого проекта, вы можете посмотреть в Require.js или Browserify для будущей работы.

+0

Спасибо, GMchris! Можете ли вы рассказать мне о моей дилемме из последнего абзаца? Btw, если вы использовали IE6 с модульным импортом, может ли это как-то исправить эту проблему, или она будет такой же там? –

+0

Вы имеете в виду использование var Module, если вы ничего не возвращаете? Основная часть модулей заключается в том, чтобы сохранить глобальное пространство имен в чистоте и что вы можете решить, что является общедоступным и частным, что вы все еще можете сделать, просто связав все, что должно быть общедоступным для объекта Module, хотя настоятельно рекомендуется, чтобы вы используйте return {// Все ваши публичные члены}; вместо. Модуль без возврата - это просто закрытие. И это очень удобно для инициализации и настройки событий и их обработчиков. Что касается IE6, я боюсь, что я не знаю достаточно на эту тему, чтобы действительно помочь. – GMchris

+0

Итак, вы бы посоветовали кому-то воспользоваться этим «Модуль без возврата - это просто закрытие. И это очень удобно для инициализации и настройки событий и их обработчиков». или нет? Я не понял. 'var MyDOs = (function (module) {...' с возвратом ничего или: '(function() {...' –

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

  • Нет связанных вопросов^_^