Обернуть сценарии, которые вы включаете, встроенными в
jQuery (function () {...});
, которые будут выполняться, когда DOMготово, и сценарии загружены.
Другой вариант может заключаться в создании какого-либо пользовательского тега шаблона, например:
{% inlinescript %}
// some javascript code.
{% endinlinescript %}
, который можно использовать для объединения встроенных сценариев по мере выполнения.Вам нужно будет агрегировать эти данные, когда ваш шаблон анализируется, что сложно, потому что теги шаблона имеют разные контексты, и это то, что вы хотите сохранить в глобальном контексте в пользовательской переменной, скажем, inline_scripts
.
Я бы посмотрел, как Django реализует различные конструкции with ... as ..
в библиотеке шаблонов по умолчанию для примера того, как добавить свою собственную переменную в контекст.
Затем внизувашей страницы вы можете сделать {{inline_scripts}}.
Самое простое решение - это jQuery.ready(function(){}) / jQuery(function(){ })
(два метода являются синонимами).
Или вы можете пересмотреть рекомендации Yahoo.Есть положительные моменты в вставке вашего javascript - это может уменьшить FOUC / FOUBC (флэш-память необработанного контента).Yahoo имеет тенденцию становиться педантичным - (просто посмотрите на API YUI;).Если вам нужно переписать части вашего приложения для улучшения производительности, которое может быть умеренно ощутимым, оно может не стоить.
Выполнение агрегации сценариев (изначально основанной на перехватах на django-фрагментах):
@register.tag(name='aggregate')
def do_aggregate(parser, token):
try:
tag_name, args = token.contents.split(None, 1)
except ValueError:
raise template.TemplateSyntaxError("'aggregate' node requires a variable name.")
nodelist = parser.parse(('endaggregate',))
parser.delete_first_token()
return AggregateNode(nodelist, args)
class AggregateNode(Node):
def __init__(self, nodelist, varname):
self.nodelist = nodelist
self.varname = varname
def render(self, context):
output = self.nodelist.render(context)
if context.has_key(self.varname):
context[self.varname] += output
else:
context[self.varname] = output
return ''
Использование:
{% aggregate inline_scripts %}
var foo = 'bar';
{% endaggregate %}
... template code
{% aggregate inline_scripts %}
var baz = 'bar';
{% endaggregate %}
... somewhere near the bottom of your page
{{ inline_scripts }}