是否可以在KnockoutJS中使用外部模板?在KnockoutJS中使用外部模板
<script type="text/html" id="a_template" src="templates/a_template.html">
</script>
我試過這個解決方案,但沒有得到它的工作。
是否可以在KnockoutJS中使用外部模板?在KnockoutJS中使用外部模板
<script type="text/html" id="a_template" src="templates/a_template.html">
</script>
我試過這個解決方案,但沒有得到它的工作。
謝謝,這看起來很直截了當。 – KebdnK 2012-02-28 11:43:03
*在您的HTML文件中,引用jQuery,jquery-tmpl(如果您使用的是jquery模板),knockout.js,TrafficCop,infuser和koExternalTemplateEngine.js文件* - 它看起來不是很輕巧:) – soniiic 2012-02-28 11:45:55
您可以還可以引用包含模板引擎,TrafficCop和infuser的koExternalTemplateEngine_all.js。所有這三個庫都是由Jim編寫的,因爲他認識到這些功能在KO之外有用。 – 2012-02-28 14:13:56
你可以使用jquery動態加載html到腳本元素中,然後根據它執行knockout。
<script type="text/html" id="template_holder"></script>
<script type="text/javascript">
$('#template_holder').load('templates/a_template.html', function() {
alert('Load was performed.');
//knockout binding goes here
});</script>
你淘汰賽綁定必須在思想上的回調函數來完成,否則有一個機會,你會嘗試綁定頁面加載
UPDATE之前,這裏是我編寫的例子上的jsfiddle演示動態加載:http://jsfiddle.net/soniiic/2HxPp/
謝謝,但我認爲外部模板引擎更好一些,因爲它隱藏了所有的請求。 – KebdnK 2012-02-28 11:46:38
好的:)但請記住,用戶仍可以查看請求:http://code.google.com/chrome/devtools/docs/network-files/network_panel.png – soniiic 2012-02-28 11:55:19
這是一個很好的解決方案。下面是一個div模板佔位符的敲除綁定示例: ko.applyBindings(myViewModel,$('#template_holder')[0]); – ROFLwTIME 2013-01-24 21:15:45
您也可以使用此模板引導程序的KO
引導程序 https://github.com/AndersMalmgren/Knockout.Bootstrap
MVC的WebAPI演示 https://github.com/AndersMalmgren/Knockout.Bootstrap.Demo
它採用約定優於配置使用此LIB https://github.com/AndersMalmgren/Knockout.BindingConventions
這意味着它approuch會自動明白MyViewModel sh烏爾德匹配到MyView的
它也準備在SPA的工作很好
免責聲明:我上面
這裏提到的3個庫背後的作者是一個小的功能建築關閉soniiic的回答:
function loadExternalKnockoutTemplates(callback) {
var sel = 'script[src][type="text/html"]:not([loaded])';
$toload = $(sel);
function oncomplete() {
this.attr('loaded', true);
var $not_loaded = $(sel);
if(!$not_loaded.length) {
callback();
}
}
_.each($toload, function(elem) {
var $elem = $(elem);
$elem.load($elem.attr('src'), _.bind(oncomplete, $elem));
});
}
這會自動加載你的文檔中的所有淘汰賽的模板,提供了他們的SRC設置及其類型爲「text/html的」。傳入回調以在所有模板加載時收到通知。不知道如果其中任何一個失敗會發生什麼。
用法示例:
<head>
<script type="text/html" src="kot/template1.html" id="template1"></script>
</head>
<body>
<script>
$(function() {
loadExternalKnockoutTemplates(function() {
// Put your ready code here, like
ko.applyBindings();
});
});
function loadExternalKnockoutTemplates(callback) {
var sel = 'script[src][type="text/html"]:not([loaded])';
$toload = $(sel);
function oncomplete() {
this.attr('loaded', true);
var $not_loaded = $(sel);
if(!$not_loaded.length) {
callback();
}
}
_.each($toload, function(elem) {
var $elem = $(elem);
$elem.load($elem.attr('src'), _.bind(oncomplete, $elem));
});
}
</script>
</body>
非常聰明,但我不會在你用'oncomplete.bind($ elem)' 和 '_.each'替換'_.bind(oncomplete,$ elem)'之前用'ko.utils.arrayForEach'替代'; - ) 不需要添加下劃線 – 2014-04-14 10:16:26
您還可以檢查這個問題:http://stackoverflow.com/questions/17073648/load-knockout-template-from-external-file-without-complex-engine。它討論了KnockoutJS的外部模板,而不使用第三方框架。 – 2014-01-25 10:58:41