Razor引擎和ember.js可以一起工作吗?

时间:2012-07-04 10:56:52

标签: asp.net-mvc-3 razor ember.js mustache handlebars.js

我正在开发一个项目,其中另一个开发人员使用ember.js框架开发了一个仅作为客户端的独立解决方案。

我被要求将此工作转移到ASP.NET MVC3项目。

问题是,ember.js在语法中使用大括号和双括号,这似乎会干扰MVC3使用的剃刀引擎。

我是否认为2种技术(ASP MVC3和ember.js)无法协同工作?

4 个答案:

答案 0 :(得分:3)

一种方法是在资源文件(resx)中使用把手模板,并在类似于此的匿名函数中将它们添加到Ember:

<script type="text/javascript" src="path/to/ember.js">
<script type="text/javascript" src="path/to/your/app.js">
<script type="text/javascript">
    (function() {
        Ember.TEMPLATES["your template name"] = Ember.Handlebars.compile('<%= template as string from the resource file goes here %>');
    })();

    App.initialize();
</script>

在您调用应用程序的initialize方法 之前会发生这种情况

当您拥有多语言支持时,资源文件也是一个好主意

答案 1 :(得分:1)

简答:是的,任何js库都可以与asp.net mvc一起使用

但是,如果您遇到某些语法问题,则需要与js库并行分析特定视图呈现引擎(Razor,Web表单,Spark等)语法< /强>

例如,jQuery使用$ sign作为Alias,可以替换。请看这个参考文献 - Replace “$”(dollar Sign) with “JQuery”

但是,如果它不起作用,那么您可能会重新考虑您的视图引擎。

答案 2 :(得分:1)

我正在使用ASP.NET MVC 4应用程序,该应用程序使用Ember并且没有任何问题。

双括号的情况很容易解决:只需使用@:@:之后的所有内容都被解释为纯文本。因此,带有把手表达的剃刀标记将是有效的:

<ul>
@if (Model.SomeCondition)
{
    @:{{#each product in products}}
    <li>{{product.name}}</li>
    @:{{/each}}
}
</ul>

更新:目前我使用Ember 1.6 - 1.9版本和Ember Data 1.0.0-beta-8 - 1.0.0-beta-12版本与ASP.NET MVC 5.2 - 效果很好。很快将在最新的Ember 1.9,Ember Data和Handlebars 2.0上迁移所有项目

答案 3 :(得分:-1)

您应该能够使用http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax.aspx中详述的块来包装您的余烬模板,以便它们可以正常使用。

据说这样做并不能满足客户的要求。一个普通的ASP.Net MVC开发人员仍然需要学习使用这个代码库的ember.js。你应该做的是使用ASP.Net MVC概念重写它,比如从模型,部分视图等创建页面。