我有一個相當大的ASP.NET MVC Web應用程序,它廣泛地使用KnockoutJS。多年來,我爲應用程序創建了許多模板,但它們都使用命名腳本標籤駐留在各種網頁中。在各種觀點上管理他們幾乎變得無法忍受。我想找出一種方法將這些模板合併到他們自己的html文件中,以便它們更易於管理。KnockoutJs和ASP.NET MVC3動態模板
我想知道是否有任何圖書館支持這個概念?我不想重蹈覆轍,因爲我確信有人已經遇到過這個問題並解決了它。這裏是我正在處理的一個快速概述...
基本上,我有很多內容類似於下面的標記。
[[ 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 ]]
我倒是喜歡向做的是保存在自己的HTML文件中personTmpl
和productTmpl
和他們拉入的觀點:我已經在同一頁面定義爲我的實際內容標記我的模板公告如所須。這將允許我只有我的cshtml文件中的內容標記。此外,它可以使我從任何地方使用模板(即Customers \ Index,Products \ Show,Home \ Index等)。
我認爲它會在每個頁面上需要一些自定義js,但我認爲這是一個小的代價來清理混亂,並使我的模板可用於所有視圖。我可以使用每個頁面或類似這樣的事情在某些服務器端代碼(僅僅是一個例子)見我
@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>
有了它們存儲到自己的模板,我甚至可以動態查詢的內容使用舊的工具提示和對話時尚$.get('/tmpl/Person.tmpl', renderFunc)
。
同樣,我不介意創建自己的實現,但我確信已經有一個解決方案。任何人?
在此先感謝!
Ryan - 這正是*我正在尋找的東西!謝謝! +1 – Luc