2016-04-19 74 views
0

的HTML腳本標籤可以用來定義命名模板:爲什麼src不能用於模板?

<script type="text/html" id="Lookup"> 
    <label class="field-title" data-bind="text: Metadata.FieldTitle, css: { hasError: !IsValid() }"></label> 
    <div data-bind="html: Metadata.FieldIntro"></div> 
    <select class="form-control" data-bind="attr: { id: 'ff' + Metadata.FormFieldID }, options: Lookup, optionsText: 'Caption', optionsValue: 'Id', optionsCaption: Metadata.FieldIntro || 'Select an item...', value: Value, css: { hasError: !IsValid() }"></select> 
    </script> 

根據MDN和MSDN,我應該能夠模板的內容移動到一個文件中,並像這樣引用它:

<script type="text/html" id="Lookup" src="Lookup.html"></script> 

根據提琴手模板文件正在加載(我有幾個)。什麼停止淘汰使用模板,當他們不內聯,有什麼可以做的呢?

從註釋中,腳本標記不解析它們加載到DOM中的內容。我可以使用jQuery ajax來加載,分析和注入,但敲除使用腳本節點的id來引用模板,所以接下來的問題是如何使得可見的片段如此加載。

在刺我猜測,我需要做的是這樣的:

$(document.body) 
.append("<div id='Lookup' style='display:none'></div>") 
.load("Templates/Lookup.html"); 

關閉,但沒有雪茄。這是糾正和結束了作爲一個功能:

function loadTemplate(name) { 
    if (name) 
    switch (name.constructor) { 
     case String: 
     $(document.body).append("<div id='" + name + "' style='display:none'></div>"); 
     $("#" + name).load("Templates/" + name + ".html"); 
     break; 
     case Array: 
     name.map(loadTemplate); 
     break; 
     default: 
     throw "Must be a string or an array of strings"; 
    } 
} 

你可以通過一個單一的模板名稱或名稱的數組。 淘汰賽愉快地使用模板。

回答

0

瀏覽器不知道如何處理用text/html編寫的程序(是的,這句話沒有多大意義,這是一種黑客攻擊)。

無論您用於處理模板的JavaScript是讀取DOM中腳本元素的子節點。它沒有被寫入檢查src屬性並加載外部內容。

+0

那麼,這回答了「爲什麼」的問題。我可以加載文件並使用jQuery ajax之類的東西注入它,但是如何命名模板呢? –

+0

更改解析腳本元素以獲取數據的任何代碼會更有意義。不使用腳本元素來提供該腳本的URL會更有意義。 – Quentin

相關問題