Asp.net mvc 3 带有KnockoutJs和ASP.NET MVC3的动态模板
我有一个相当大的ASP.NET MVC web应用程序,它在整个过程中广泛使用KnockoutJS。多年来,我为应用程序创建了许多模板,但是它们都使用命名脚本标记驻留在各种网页中。在各种不同的视图上管理它们几乎变得难以忍受。我想找出一种方法,将这些模板整合到它们自己的html文件中,以便它们更易于管理 我想知道是否有任何库支持这个概念?我不想重新发明轮子,因为我相信过去已经有人遇到过这个问题并解决了它。这里是我正在处理的快速概述 基本上,我有很多内容类似于下面的标记。请注意,我在与实际内容标记相同的页面中定义了模板:Asp.net mvc 3 带有KnockoutJs和ASP.NET MVC3的动态模板,asp.net-mvc-3,knockout.js,jquery-templates,Asp.net Mvc 3,Knockout.js,Jquery Templates,我有一个相当大的ASP.NET MVC web应用程序,它在整个过程中广泛使用KnockoutJS。多年来,我为应用程序创建了许多模板,但是它们都使用命名脚本标记驻留在各种网页中。在各种不同的视图上管理它们几乎变得难以忍受。我想找出一种方法,将这些模板整合到它们自己的html文件中,以便它们更易于管理 我想知道是否有任何库支持这个概念?我不想重新发明轮子,因为我相信过去已经有人遇到过这个问题并解决了它。这里是我正在处理的快速概述 基本上,我有很多内容类似于下面的标记。请注意,我在与实际内容标记相
[[ HOME/INDEX.CSHTML ]]
<h1>Customers</h1>
<div data-bind="template: {name: 'personTmpl', foreach: customers}"></div>
<h1>Products</h1>
<div data-bind="template: {name: 'productTmpl', foreach: products}"></div>
<script type="text/html" id="personTmpl">
Name: <span data-bind="text: name" />
Address: <span data-bind="text: address" />
</script>
<script type="text/html" id="productTmpl">
Description: <span data-bind="text: description" />
Category: <span data-bind="text: category" />
</script>
<script type="text/javascript">
$(function(){
var json = {
customers: [ { name: 'Joe', address: 'Denver, CO' } ],
products: [ { name: 'Skis', category: 'Outdoors' } ]
};
var vm = new CustomViewModel(json);
ko.applyBindings(vm);
});
</script>
[[ END HOME/INDEX.CSHTML ]]
通过将它们存储到自己的模板中,我甚至可以使用老式的$.get('/tmpl/Person.tmpl',renderFunc)
动态查询工具提示和对话框的内容
同样,我不介意创建自己的实现,但我相信已经有了解决方案。有人吗
提前谢谢 我的建议是在这里查看外部模板引擎: 它允许您将模板放置在外部文件中,在绑定中引用它们,就像通常使用
name
参数一样,并使用一些约定或配置来确定查找模板文件的确切路径
外部模板引擎是一个非常健壮的解决方案。我最近也在使用require.js
及其text
插件来实现这一目的。此答案中的更多信息:
如果您想在线呈现它们,那么我假设一个助手函数可以加载文件并将其包装在一个非JS类型的脚本标记中。Ryan-这正是我想要的!谢谢大家!+1.
@section templates {
@Content.Template("Person.tmpl", Url)
@Content.Template("Product.tmpl", Url)
}
<h1>Customers</h1>
<div data-bind="template: {name: 'personTmpl', foreach: customers}"></div>
<h1>Products</h1>
<div data-bind="template: {name: 'productTmpl', foreach: products}"></div>
<script type="text/javascript">
$(function(){
var json = @Html.Raw(Json.Encode(ViewBag.PageData)));
var vm = new CustomViewModel(json);
ko.applyBindings(vm);
});
</script>