Asp.net mvc 3 Razor引擎和ember.js可以一起工作吗?

Asp.net mvc 3 Razor引擎和ember.js可以一起工作吗?,asp.net-mvc-3,razor,ember.js,mustache,handlebars.js,Asp.net Mvc 3,Razor,Ember.js,Mustache,Handlebars.js,我正在从事一个项目,其中另一个开发人员使用ember.js框架开发了一个UI,作为一个独立的客户端解决方案 我被要求将此工作转移到ASP.NET MVC3项目 问题是,ember.js在语法中使用大括号和双大括号,这似乎干扰了MVC3使用的razor引擎 我认为这两种技术(ASP MVC3和ember.js)不能一起工作,对吗?您应该能够使用中详细介绍的模块包装您的ember模板,以便它们正确可用 也就是说,这样做并不能真正满足客户的需求。普通的ASP.NETMVC开发人员仍然需要学习ember

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

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

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


我认为这两种技术(ASP MVC3和ember.js)不能一起工作,对吗?

您应该能够使用中详细介绍的模块包装您的ember模板,以便它们正确可用


也就是说,这样做并不能真正满足客户的需求。普通的ASP.NETMVC开发人员仍然需要学习ember.js才能使用此代码库。您真正应该做的是使用ASP.Net MVC概念重新编写它,如从模型创建页面、部分视图等。

简短回答:是的,任何js库都可以使用ASP.Net MVC

但是,如果遇到一些语法问题,则需要与js库并行分析特定的视图渲染引擎(Razor、web表单、Spark等)语法

例如,jQuery使用$sign作为别名,可以替换。看看这些参考资料-


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

一种方法是在资源文件(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>

(功能(){
Ember.TEMPLATES[“您的模板名称”]=Ember.handlebar.compile(“”);
})();
App.initialize();
这应该在调用应用程序的
initialize
方法之前发生


当您有多语言支持时,资源文件也是一个好主意。我正在使用ASP.NET MVC 4应用程序,该应用程序大量使用Ember,并且没有任何问题。

使用双大括号的情况有非常简单的解决方法:只需使用
@:
@:
之后的所有内容都解释为纯文本。因此,此带有Handlebar表达式的razor标记将有效:

<ul>
@if (Model.SomeCondition)
{
    @:{{#each product in products}}
    <li>{{product.name}}</li>
    @:{{/each}}
}
</ul>
    @if(Model.SomeCondition) { @:{{#产品中的每个产品}
  • {{product.name}
  • @:{{/每个}} }

更新:目前我正在使用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和Handlebar 2.0上迁移所有项目

为什么要求您将其迁移到ASP.Net MVC中?现在的应用程序有问题吗?这是客户的要求。他们是一家主要使用.NET/.NETMVC的公司。UI是由一个主要有php背景的开发人员完成的。+1是为了反驳没有评论的-1。不是真的。您不能用ASP.NET MVC重写相同的行为,因为它是一个服务器端框架,因此只接收http请求作为输入。另一方面,Ember.js是一个客户端框架,它接收浏览器事件,因此可以对用户交互做出更复杂的反应。有关客户端mvc和服务器端mvc之间的比较,请参见:使用ASP.NET mvc和使用Ember的原因各不相同。“使用ASP.NET MVC概念”编写东西可能不是他的客户想要的。仅仅因为他们需要使用ASP.NET MVC作为服务器端技术并不意味着他不能再利用客户端框架,使用Ember也不一定会阻止“满足[客户]的需求”。为了支持服务器端的预编译模板,我建议使用csharp Ember Handlebar库(通过NuGet安装)这样您就不会再与razor、haml、aspx或任何视图引擎发生任何冲突