我正在开发一个项目,其中另一个开发人员使用 ember.js 框架开发了一个 UI 作为独立的客户端解决方案。
我被要求将这项工作转移到 ASP.NET MVC3 项目中。
问题是,ember.js 在语法中使用了大括号和双大括号,这似乎干扰了 MVC3 使用的 razor 引擎。
我是否认为这两种技术(ASP MVC3 和 ember.js)不能一起工作?
我正在开发一个项目,其中另一个开发人员使用 ember.js 框架开发了一个 UI 作为独立的客户端解决方案。
我被要求将这项工作转移到 ASP.NET MVC3 项目中。
问题是,ember.js 在语法中使用了大括号和双大括号,这似乎干扰了 MVC3 使用的 razor 引擎。
我是否认为这两种技术(ASP MVC3 和 ember.js)不能一起工作?
一种方法是将把手模板放在资源文件 (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
方法之前发生
当您有多语言支持时,资源文件也是一个好主意
我正在开发大量使用 Ember 并且没有任何问题的 ASP.NET MVC 4 应用程序。
带有双括号的案例有非常简单的解决方法:只需使用@:
. 之后的所有内容都@:
被解释为纯文本。因此,这个带有车把表达式的剃刀标记将是有效的:
<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 上迁移所有项目
您应该能够使用 http://weblogs.asp.net/scottgu/archive/2010/12/15/asp-net-mvc-3-razor-s-and-lt-text-gt-中详述的块syntax.aspx来包装您的 ember 模板,以便它们正确可用。
也就是说,您这样做并没有真正满足客户的要求。一个普通的 ASP.Net MVC 开发人员仍然需要学习 ember.js 才能使用这个代码库。您真正应该做的是使用 ASP.Net MVC 概念重写它,例如从模型、部分视图等创建页面。