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» - вопрос очень субъективный.

Я много слышал о StringTemplate, будет интересно посмотреть, сможете ли вы заставить это работать, изменив разделители ANTLR, как предлагается ниже ...

Xian 07.12.2008 22:31

Что может быть лучшим разделителем для символа «$»? Может быть, «<$ ... $>»?

OnesimusUnbound 23.12.2008 04:37
stackoverflow.com/questions/1451319/…
Mauricio Scheffer 31.08.2010 09:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
17
3
15 385
14
Перейти к ответу Данный вопрос помечен как решенный

Ответы 14

Возможно jQuery.noConflict у вас подойдет

Думаю, этот вариант не применим для StringTemplate. Stringtemplate не является библиотекой JavaScript. NoConflict () используется, когда используется другая библиотека JavaScript, и эта библиотека использует $

OnesimusUnbound 06.10.2008 18:02

Почему бы не использовать "jQuery" вместо "$"

ANaimi 02.11.2008 07:41

Я всегда хотел «$» :). Во всяком случае, у вас есть точка ANaimi :). Думаю, я могу отпустить '$'

OnesimusUnbound 05.11.2008 02:55

Вы пробовали $$ или / $, чтобы избежать знаков доллара в строковом шаблоне? Я не уверен насчет ST конкретно, но именно так работает большинство шаблонизаторов.

Что касается других движков шаблонов, мне очень понравился nVelocity, когда я использовал его в своем проекте.

ST использует \ $ для обозначения его как $, когда движок генерирует вывод, но это выглядело неудобно. Что ж, я мог бы посмотреть на nVelocity и посмотреть, понравится ли он мне. :)

OnesimusUnbound 06.10.2008 18:04

Следовать за. У nVelocity есть проблема с $ (mail-archive.com/[email protected]/…), но тогда nVelocity выглядит чище.

OnesimusUnbound 06.10.2008 18:52

Взгляните на проект mvccontrib. На данный момент у них есть 4 различных движка просмотра: brail, nhaml, nvelocity и xslt.

http://www.codeplex.com/MVCContrib

Я очень рекомендую Искра. Я уже некоторое время использую его с jQuery и пока не столкнулся ни с одной проблемой.

Spark не будет конфликтовать с jQuery, потому что $ распознается только непосредственно перед {выражением}. Не существует допустимого оператора jQuery, который начинается с «$ {».

loudej 12.10.2008 08:33

Spark выглядит очень многообещающе. Похоже, мне это понравилось.

OnesimusUnbound 15.12.2008 16:55

В последнее время я много использую Spark, и пока он отлично работает. настоятельно рекомендуется.

Dave Thieben 19.07.2010 17:59

Если вы хотите придерживаться StringTemplate (ST) см. эту статью из вики ST. Вы также можете полностью изменить поведение, отредактировав Antlr.StringTemplate.Language \ DefaultTemplateLexer.cs и заменив «$» на то, что хотите.

Вы можете попробовать jsRepeater.

Ответ принят как подходящий

Конечно, вы можете переместить свою логику js в файл .js. Но если вы хотите, чтобы он был встроен в ваши представления StringTemplate, вы можете избежать его с помощью конструкции \ $.

Кроме того, вы можете просто использовать конструкцию jQuery ("selector") вместо конструкции $ ("selector"), если хотите избежать синтаксиса экранирования.

Вот хорошая статья о использование StringTemplate в качестве механизма просмотра в MVC.

Также есть сопутствующий Движок OpenSource вместе с некоторыми примерами.

Кроме того, как упоминалось выше, вы можете изменить свой лексер типов. (сделайте его альтернативным символом $).

использование jQuery вместо $ в любом случае является хорошей привычкой, поскольку библиотеки prototype и ms ajax в любом случае захватывают $, и вы хотите точно знать, что такое jQuery, а что не так хорошо.

DevelopingChris 18.07.2009 16:32

JQuery может быть устранен с помощью ключевого слова jQuery, например:

jQuery(

вместо этого:

$(

Я считаю это лучшей практикой. Это исключает любую возможность конфликтов с другой библиотекой и делает код более читабельным.

Мне очень нравится синтаксис в Django, поэтому рекомендую NDjango :)

JsonFx.NET имеет мощный клиентский шаблонизатор со знакомым синтаксисом стиля ASP.NET. Вся структура специально разработана для хорошей работы с jQuery и ASP.NET MVC. Вы можете получить примеры того, как создать пользовательский интерфейс реального мира: http://code.google.com/p/jsonfx-examples/

Я использую 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.

Вам может понадобиться этот .NET Template Engine. Если вы хотите использовать символ «$», просто используйте «$$». См. Код ниже:

{%carName = "Audi R8"/}

{%string str = "This is an $carName$"/}

$str$
$$str$$

вывод будет

This is an Audi R8
$str$

Если я правильно понимаю StringTemplate версии 4, вы можете определить свой собственный escape-символ в конструкторе Template (или TemplateGroup).

Обнаружено, что Mustache является наиболее надежным, простым в использовании и легким полнофункциональным механизмом создания шаблонов для проектов .Net (веб и серверная часть)

Хорошо работает с .Net 3.5 (это означает, что ему не нужен динамический тип и .Net 4.0 для работы с моделями смешанного типа, такими как Razor).

Что мне больше всего нравится, так это возможность встраивать в них произвольные IDicts и заставлять движок работать правильно. Это делает этап переупаковки обязательных для всех двигателей супер простым:

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 или около того поддерживаемых языков.

У меня был опыт работы с этим, но я не вижу возможности локализовать контент. Использование глобальных ресурсов на моей странице шаблона test.aspx будет анализировать как «<% = Resources.Test.FirstName%>».

jimmyo 27.11.2012 05:02

Другие вопросы по теме