$ JQuery конфликтует с $ StringTemplate.Net в ASP.Net MVC
Я изучаю ASP.NET MVC и хочу добавить jQuery, чтобы сделать сайт интерактивным. Я использовал StringTemplate, портированный на.Net, в качестве механизма шаблонов для генерации html и отправки JSON. Однако, когда я просматриваю страницу, я не мог ее видеть. После отладки я понял, что $ используется StringTemplate для доступа к свойству и т. Д., И jQuery использует его также для манипулирования DOM. Ну и дела, я смотрел на других шаблонных движках, и большинство из них использует знак доллара:(.
Любой альтернативный шаблонизатор для ASP.Net MVC? Я хотел сохранить jQuery, потому что MSFT объявил, что он будет использоваться в Visual Studio (2008?)
Заранее спасибо:)
Обновить
Перейдите к ответу в вопросе " Сравнение механизма просмотра ASP.NET MVC", чтобы получить исчерпывающий список механизма шаблонов для ASP.NET MVC, а также их плюсы и минусы.
Обновление 2
В конце я просто помещу код JavaScript, включая JQuery, в отдельный файл сценария, поэтому я не буду беспокоиться о $
смешиваясь в файле шаблона.
Обновление 3
Изменено название для отражения того, что мне нужно решить. Ведь "Лучший X в Y" - очень субъективный вопрос.
14 ответов
Вы, конечно, можете переместить свою логику js в файл.js. Но если вы хотите, чтобы он был встроен в ваши представления StringTemplate, вы можете избежать его, используя конструкцию \$.
Кроме того, вы можете просто использовать конструкцию jQuery("селектор") вместо $("селектор"), если хотите избежать синтаксиса экранирования.
Вот хорошая статья об использовании StringTemplate в качестве движка просмотра в MVC.
Также есть сопутствующий движок OpenSource и некоторые примеры.
Также, как уже упоминалось выше, вы можете изменить свой Type Lexer. (сделать его альтернативным символом $).
Я очень рекомендую Spark. Я уже некоторое время использую его с jQuery и пока не сталкивался ни с одной проблемой.
JQuery может быть устранен с помощью ключевого слова jQuery, например:
jQuery(
вместо этого:
$(
Я бы посчитал это лучшей практикой. Это исключает любую возможность столкновения с другой библиотекой и делает код более читабельным.
Посмотрите на проект mvccontrib. На данный момент у них есть 4 различных движка: Brail, Nhaml, Nvelocity и XSLT.
Если вы хотите придерживаться StringTemplate (ST), обратитесь к этой статье из вики ST. Вы также можете полностью изменить поведение, отредактировав Antlr.StringTemplate.Language\DefaultTemplateLexer.cs и заменив "$" на то, что вы хотите.
Мне очень нравится синтаксис в Django, поэтому я рекомендую NDjango:)
Вы пытались $$ или /$, чтобы избежать знака доллара в шаблоне строки? Я не уверен насчет ST, но именно так работает большинство шаблонизаторов.
Что касается других шаблонизаторов, я действительно любил nVelocity, когда использовал его в проекте.
Я использовал ANTLR StringTemplate для проекта ASP.NET MVC. Однако я расширил грамматику StringTemplate (template.g) для распознавания "%" (aspx.template.g) в качестве разделителей. Вы можете найти эти файлы, если загрузите версию StringTemplate.net. Я сгенерировал соответствующие файлы: AspxTemplateLexer.cs, AspxTemplateParser.cs, AspxTemplateParserTokenTypes.cs и AspxTemplateParserTokenTypes.txt.
Кроме того, я изменил StringTemplateLoader.cs для распознавания расширений.aspx и.ascx, которые распознает Visual Studio. Таким образом, я не застреваю с расширением.st, и клиенты не знают разницы.
В любом случае, после перестройки StringTemplate у меня есть поведение, которое я хочу. Что мне нравится в StringTemplate, так это то, что он НЕ позволяет внедрить ЛЮБОЙ код в шаблон. Похоже, что Spark, как шаблон ASP/MVC по умолчанию, разрешает код, что делает шаблоны менее переносимыми.
Я бы предпочел использовать "<%" и "%>" в качестве разделителей, но, к сожалению, грамматику ANTLR кажется несколько сложной и хрупкой для изменения, если кто-то другой не сделал этого. С другой стороны, StringTemplate имеет отличную поддержку сообщества и отличный подход к разделению - что является точкой MVC.
JsonFx.NET имеет мощный клиентский шаблонизатор со знакомым синтаксисом в стиле ASP.NET. Вся структура специально разработана для работы с jQuery и ASP.NET MVC. Вы можете получить примеры того, как создать реальный пользовательский интерфейс, по адресу: http://code.google.com/p/jsonfx-examples/
Если я правильно понимаю StringTemplate версии 4, вы можете определить свой собственный escape-символ в Template
(или же TemplateGroup
) конструктор.
Вам может понадобиться этот .NET Template Engine. Если вы хотите использовать символ "$", просто используйте "$$". Смотрите код ниже:
{%carName = "Audi R8"/}
{%string str = "This is an $carName$"/}
$str$
$$str$$
выход будет
This is an Audi R8
$str$
Установлено, что Mustache является самым надежным, простым в использовании и легким полнофункциональным шаблонизатором для проектов.Net (веб и бэкэнд)
Хорошо работает с.Net 3.5 (это означает, что для работы с моделями смешанного типа, такими как Razor, не требуется динамический тип и.Net 4.0).
То, что мне нравится больше всего, - это способность вкладывать произвольные идентификаторы внутри и заставить движок делать правильные вещи. Это делает обязательной для всех процедуру переустановки двигателей очень простой:
var child = new {
nested = "nested value"
};
var parent = new {
SomeValue = "asdfadsf"
, down = child
, number = 123
};
var template = @"This is {{#down}}{{nested}}{{/down}}. Yeah to the power of {{number}}";
string output = Nustache.Core.Render.StringToString(template,parent);
// output:
// "This is nested value. Yeah to the power of 123"
Что самое замечательное в Mustache, так это тот же самый шаблон, который работает точно так же в чистом JavaScript или любом другом из 20 или около того поддерживаемых языков.