0

使用IE8時,我在使用JavaScript呈現樹對象時遇到問題。爲了在HTML頁面中編寫層次結構,我需要使用一個挖空模板來遞歸渲染樹對象。敲除模板在IE 8中不能使用RequireJS和Require Text

我使用淘汰賽組件使用requirejs渲染的最終結果和require.text

該組件在所有瀏覽器除了IE8工作的罰款。我知道我不應該使用IE8,但這是一家公司的Intranet站點,無法立即升級所有瀏覽器。 我簡化了代碼,只使用模板呈現普通列表中的數字列表。

這裏是test.vm.js視圖模型:

define(['knockout'], function(ko) { 

function TestViewModel() { 
    var self = this; 
    self.Title = "Example"; 
    self.List = [ 
     { Name: "1" }, 
     { Name: "2" }, 
     { Name: "3" }, 
     { Name: "4" } 
    ]; 
} 

return TestViewModel; 
}); 

這裏是test.view.js查看:

<script type="text/html" id="testTemplate"> 
<li data-bind="text: Name"></li> 
</script> 

<div> 
<div data-bind="text: Title"></div> 
<ul data-bind="template: {name: 'testTemplate', foreach: List}"> 
</ul> 
</div> 

最後,HTML頁面調用組件:

<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>App</title> 
    <script src="Scripts/jquery-1.10.2.js"></script> 
    <script src="Scripts/require.js"></script> 
</head> 
<body> 


<script type="text/javascript"> 

    require.config({ 
     baseUrl: "/", 
     paths: { 
      'knockout': 'Scripts/knockout-3.2.0', 
      'text': 'Scripts/require.text' 
     } 
    }); 


    $(document).ready(function() { 
     require(['knockout'], function (ko) { 
      ko.applyBindings(); 
     }); 
    }); 

    require(['knockout'], function (ko) { 
     ko.components.register('TestComponent', { 
      viewModel: { require: 'Scripts/test.vm' }, 
      template: { require: 'text!Scripts/test.view.js' } 
     }); 
    }); 
</script> 

<!-- ko component: { name: "TestComponent" } --> 
<!-- /ko --> 

</body> 
</html> 

我可以看到瀏覽DOM的主要區別在於該模板在其他瀏覽器中呈現completel Ÿ

<script id="testTemplate" type="text/html"> 
<li data-bind="text: Name"></li> 
</script> 

而在IE8是空

<SCRIPT id=testTemplate type=text/html __ko__1453323521948="ko12"></SCRIPT> 

如果我把模板「testTemplate」視圖文件之外並直接在HTML頁面中,該組件開始工作。該組件不工作只是因爲模板是空的。將「testTemplate」放在HTML中是一個部分解決方案,但我需要找到放置在視圖文件中時爲什麼不起作用。

更新: 我簡化了場景。顯然是組件註冊中「模板」參數中的一些錯誤。如果模板包含在腳本標記中,則內容將被忽略並且不會呈現在頁面中。如果我決定將其更改爲使用<template>標籤,組件將嘗試解析模板內的數據綁定並顯示錯誤。模板標籤應該在綁定中被忽略,但組件不會忽略標籤。我嘗試了使用我讀取的最後一個標記的暫時黑客,將其配置爲被模板忽略,方法是將模板放在textarea標記中並放置display:none。現在,所有瀏覽器都顯示內容,但我不喜歡這個解決方案。

回答

0

我爲一家仍然使用Windows XP的公司工作,所以我也只限於IE8。 我們成功使用了帶有require.js和文本插件的挖空組件模板。

Re。 「如果模板被封閉在腳本標記,內容被忽略,而不是在頁面呈現」:

我們有我們的HTML文件模板內,並使用帶後綴去除包裝HTML & body標籤! 。由於文件擴展名對於編輯標記是正確的,因此這樣可以成功加載模板,並且還提供了更好的編輯支持