2011-01-25 2 views
0

Раньше я имел это:Почему все мои jquery-плагины в один файл не работают?

<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/json2.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery-msdropdown/js/jquery.dd.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.scrollTo-1.4.2/jquery.scrollTo-min.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery-ui-1.8.7.custom/js/jquery-ui-1.8.7.custom.min.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/alertbar.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.masonry.min.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/fileuploader.js" type="text/javascript"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.jeditable.mini.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.growfield2.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.placeholder.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.color.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/jquery.fancybox-1.3.4/fancybox/jquery.fancybox-1.3.4.pack.js"></script> 
<script type="text/javascript" src="{{MEDIA_URL}}js/plugins/tipsy/src/javascripts/jquery.tipsy.js"></script> 

Все работает, когда я загрузить страницу, и нет никаких ошибок. Мой друг сказал мне объединить их всех в 1 файл. Так что я сделал:

find somedir/ -name '*.js' -exec cat {} + > ../allplugins.js 

Теперь, когда я включаю «allplugins.js», я получаю пойманные ошибки типа. Объект # не имеет метод «редактируемого»

ответ

0

Я заметил, что вы отметили этот вопрос с помощью django. Вы можете быть заинтересованы в django-mediasync, который автоматически обрабатывает JS файл конкатенации для вас (см http://pypi.python.org/pypi/django-mediasync/2.0.0#joined-files):

Регистрация файлов указаны в MEDIASYNC ДИКТ с использованием JOINED. Это dict, который отображает отдельные носители на псевдоним для объединенных файлов.

'JOINED': { 'styles/joined.css': ['styles/reset.css','styles/text.css'], 'scripts/joined.js': ['scripts/jquery.js','scripts/processing.js'], },

Файлы, перечисленные в JOINED будут объединены и подтолкнул к S3 с именем псевдонима. Отдельные файлы CSS также будут перенесены на S3. Псевдонимы должны заканчиваться либо .css, либо .js для того, чтобы тип контента был установлен соответствующим образом.

Существующие шаблонные теги могут использоваться для ссылки на объединенный носитель. Просто использовать соединяемый псевдоним в качестве аргумента:

{% css_print "joined.css" %}

Когда подаются локально, теги шаблонов воздадут HTML тег для каждого из файлов, которые составляют присоединились файл:

<link rel="stylesheet" href="/media/styles/reset.css" type="text/css" media="screen, projection" />

<link rel="stylesheet" href="/media/styles/text.css" type="text/css" media="screen, projection" />

Когда служил удаленно, на е HTML тег будет визуализироваться с именем присоединился файл:

<link rel="stylesheet" href="http://bucket.s3.amazonaws.com/styles/joined.css" type="text/css" media="screen, projection" />

Это предназначено для использования статического контента сайта через что-то вроде Amazon S3, но она также может быть использована только обслуживать статические носители с вашего локального сервера, а также автоматически обрабатывать контакты.

+0

Иордания, можете ли вы рассмотреть эту проблему для меня? http://stackoverflow.com/questions/4801139/how-come-this-django-plugin-wont-work Я следил за вашим советом и синхронизировал все с S3. Но это не превратит мой тег MEDIA_URL в ссылку S3. – TIMEX

1

редактировать жаль — материал об использовании «>>» вместо «>», вероятно, нет необходимости, так как перенаправление происходит на уровне «найти» команда, так это должен работать нормально. Извини за это.

этот материал является ненужным

Должно быть:

find somedir/ -name '*.js' -exec cat {} + >> ../allplugins.js 

(То есть, ">>", а не просто ">".) Предшествовать с:

rm ../allplugins.js 

или что-то подобное, иначе каждый раз, когда вы будете строить, вы сделаете файл больше.

конца излишней часть

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

Также найдите своего друга и бросьте на него воздушный шар.

1

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

+0

Что делать, если один из этих сценариев имеет относительные пути внутри? Тогда это все испортит? – TIMEX

+0

@TIMEX вам нужно исправить это вручную – Adeel

2

Вы должны конкатенировать свои плагины javascript в том же порядке, в котором вы их импортируете.

Вы можете сделать это, указав их в файле (скажем, plugins.list), по одной строке для каждого имени файла. Затем построить allplugins.js с помощью:

cat plugins.list | while read jsfile; do 
    echo 
    echo "//===== `basename "$jsfile"` =====" 
    cat "$jsfile" 
done > ../allplugins.js 

Например, если у вас есть файл inc.js, который имеет

obj = { 'editable': function(){ return 42; } }; 

, а затем script.js, что пытается использовать объект, определенный в inc.js :

obj.editable() 

Если изменить порядок этих двух файлов, вы можете увидеть, что OBJ используется, но до сих пор не определены.

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