2008-10-06 37 views
16

我正在探索ASP.NET MVC,我想添加jQuery來使網站互動。我使用了StringTemplate,移植到.Net,作爲我的模板引擎來生成html併發送JSON。但是,當我查看該頁面時,我看不到它。在調試之後,我意識到$是由StringTemplate用來訪問屬性等的,而jQuery也使用它來操縱DOM。哎呀,我已經看了其他模板引擎,其中大部分採用美元符號:(。

用於ASP.Net MVC的任何替代模板引擎?我想保留的jQuery因爲MSFT宣佈,將在Visual使用工作室(2008?)

感謝提前:)

更新

請到the answerASP.NET MVC View Engine Comparison問題對於ASP.NET MVC模板引擎的完整列表,以及它們的優缺點

更新2

最後我就乾脆把JavaScript代碼,包括JQuery的,在一個單獨的腳本文件,所以我不會擔心在模板文件中的$交融。

更新3

改變了標題,以反映什麼,我需要解決的問題。畢竟「Y中最好的X」是非常主觀的問題。

+0

我聽說過關於StringTemplate的很棒的事情,看看你是否可以通過改變ANTLR分隔符來獲得這個工作將是有趣的,如下所示... – Xian 2008-12-07 19:31:03

+0

什麼可能是'$'更好的分隔符?難道是'<$ ... $>'? – OnesimusUnbound 2008-12-23 01:37:45

+1

http://stackoverflow.com/questions/1451319/asp-net-mvc-view-engine-comparison – 2010-08-31 05:01:07

回答

12

您當然可以將您的js邏輯移動到.js文件中。但是如果你想讓它與你的StringTemplate視圖內聯,你可以使用\ $構造來轉義它。另外,如果你想避免轉義語法,你可以簡單地使用jQuery(「selector」),而不是$(「selector」)構造。

這裏有using StringTemplate as a View Engine in MVC的好文章。

還有一個附帶的OpenSource engine, along with some samples

另外,如上所述,您可以修改您的Type Lexer。 (使其成爲$的替代字符)。

6

也許jQuery.noConflict會爲你工作

+2

我認爲這個選項不適用於StringTemplate。 Stringtemplate不是一個JavaScript庫。當使用另一個JavaScript庫並且該庫使用$ – OnesimusUnbound 2008-10-06 14:02:14

+2

時,會使用noConflict()爲什麼不使用「jQuery」而不是「$」 – ANaimi 2008-11-02 04:41:26

+1

我總是想要'$':)。無論如何,你有一個點ANAIMI :)。我想我可以放棄'$' – OnesimusUnbound 2008-11-04 23:55:38

1

你試過$$或/ $逃避串模板中的美元符號?我不確定ST的具體情況,但那是大多數模板引擎的工作原理。

至於其他模板引擎,當我在一個項目中使用它時,我真的很喜歡nVelocity。

10

我會強烈建議Spark。我已經用jQuery使用它一段時間了,到目前爲止還沒有遇到過單個問題。

3

如果你想堅持ST維基上的StringTemplate(ST)see this article。您也可以通過編輯Antlr.StringTemplate.Language \ DefaultTemplateLexer.cs並用您想要的替換「$」來更改行爲。

7

的JQuery可以使用jQuery的關鍵字這樣被消除歧義:

jQuery(

,而不是這樣的:

$(

我會認爲這是一個最好的做法。它消除了與其他庫衝突的可能性,並使代碼更具可讀性。

3

我真的很喜歡在Django的語法,所以我建議NDjango :)

1

我一直在使用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的重點。

0

可能需要此.NET Template Engine。如果你想使用'$'字符,只需使用'$$'。請參見下面的代碼:

{%carName = "Audi R8"/} 

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

$str$ 
$$str$$ 

輸出將是

This is an Audi R8 
$str$ 
0

如果我沒有理解StringTemplate的版本4正確,你可以在Template(或TemplateGroup)構造函數定義自己的逃逸字符。

0

發現小鬍子是最防呆,最容易使用的,最輕的全功能模板用於.NET項目(Web和後端)與.net 3.5

作品以及引擎(這意味着它不會需要動態類型和.Net 4。0可用於混合類型模型,如Razor)。

我最喜歡的部分是嵌入任意IDicts的能力,並讓引擎做正確的事情。這使得強制參加的所有發動機reboxing步驟超簡單:

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" 

什麼是最漂亮的小鬍子左右是完全相同的模板工程在純JavaScript或完全相同的任何其他的20種左右支持的語言。