Я посреди создания веб-приложения с интенсивным использованием плагинов jQuery и большой привязкой.
Бэкенд был разработан с шаблонной системой, которая только позволяет (на данный момент) помещать все сценарии в тот файл HTML. Мы будем использовать компрессор YUI для слияния всех они в один.
Теперь, для привязки, как плохо это должно иметь, связывает в файле HTML (который теперь является шаблоном для целого сайта) для элементов, которые не могут присутствовать на конкретной странице?
Любой совет значительно ценится
Я довольно широко использовал решение Пола Айриша на основе разметки на крупных сайтах.
Одной из самых больших проблем при этом является производительность - селектор будет оцениваться и DOM будет перебираться для каждой привязки, не предназначенной для конкретной страницы. По крайней мере, возможно установить объектный литерал для запуска соответствующего готового кода привязки на основе идентификатора страницы, который может быть window.location.href
или его подстрокой. Что-то вроде
// avoid global pollution!
(function() {
var pages = {
pageX : {
ready: function() { /* code to run on ready */ },
teardown: function() { /* code to run on teardown */ }
},
pageY : {
ready: function() { /* code to run on ready */ },
teardown: function() { /* code to run on teardown */ }
},
}
// set up ready event handler
$(ready);
// handler function to execute when ready event raised
// Note: Access to pages through closure
function ready() {
var location = window.location.href;
pages[location].ready();
}
})();
Будьте осторожны с селекторами, если у вас есть несколько больших страниц. Например, если у вас есть несколько страниц с большими, но инертными (без привязок) таблицами, а на других страницах таблицы маленькие, но в них есть элементы управления, вам, вероятно, не стоит делать следующее:
$('td.bindMe').bind('whatever', function() { ... });
(Отложите в сторону проблему live(); иногда вам нужно работать с каждым элементом, и это то, о чем я говорю). Проблема в том, что Sizzle придется просматривать все элементы td на странице, что потенциально возможно. Вместо этого можно поместить некий "маркерный" контейнер вокруг таких вещей, как "активная" таблица с элементами управления, и работать таким образом:
$('table#withControls').find('td.bindMe').bind(/* ... */);
Таким образом, Sizzle нужно только выяснить, что нет таблицы с названием "withControls", и все готово.
Самая большая проблема при использовании всех привязок на всех страницах заключается в том, что вы можете получить привязки, которые не собирались иметь, что вызывает проблемы ...
И, конечно, у вас будут проблемы с производительностью при загрузке страницы, но если это проблема, конечно, зависит от того, сколько привязок у вас есть и как выглядит код.
Вы можете потерять некоторую производительность на стороне клиента (анализ файла, выполнение обработчика подготовки документа), но это улучшает кэширование на клиенте (т. Е. файл не нужно передавать более одного раза). Это также сохраняет поиск сервера. Я думаю, что это скорее преимущество, чем недостаток, если вы можете быть уверены, что случайно не измените объекты.
Удалите суффикс : link
, и вы должны быть в порядке:
#mydiv { background-color:blue; }
#mydiv a { color:white; }
Либо вы можете добавить имя класса к ссылке:
<div id="mydiv">
<%= Html.ActionLink("Some Text", "SomeAction",
new { @class = "class-name" }) %>
</div>
-121--3036598- В Scala можно моделировать , если
с правильной оценкой побочных эффектов с помощью аргументов call-by-name.
def If[A](cond : Boolean, truePart : => A, falsePart : => A) = if (cond) truePart else falsePart
Эта функция также может использоваться для моделирования партий новых структур управления .
-121--2461711-Я думаю, что механизм селектора достаточно быстр, чтобы вы, или кто-либо еще, не заметили разницы.
Очевидно, что это не лучшая практика, но если вы привязываетесь к идентификаторам и классам и у вас не будет никаких конфликтов или непреднамеренных привязок, то я не вижу вреда.