2012-10-26 77 views
6

該敲除2.1綁定表達式工作Firefox和IE9下細,但崩潰在IE9兼容模式:IE版本引發錯誤,錯誤「<em>預期標識符,字符串或數字</em>「「預期標識符,字符串或數字」

<div data-bind="template: { 
    if: myDataModel, 
    data: myDataModel, 
    afterRender: setup(myDataModel) }"> 

我發現實際發生下的調試器,它的這行代碼(敲除2.1.0.debug.js):

return new Function("sc", functionBody) 

functionBody等於上面的表達式的字符串。我試圖玩空格和回車字符 - 沒有什麼幫助,結果相同:除了IE9兼容模式以外,任何瀏覽器都能正常工作

有什麼建議嗎?

回答

12

我認爲問題是舊版本的IE不喜歡「if」或類似的保留字顯示爲屬性名稱。嘗試在屬性名稱周圍添加單引號。

<div data-bind="template: { 
'if': myDataModel, 
data: myDataModel, 
afterRender: setup(myDataModel) }"> 

另一種常見的情況是,當你有「class」綁定時,會發生這種情況。同樣的修正:JS的保留字

<tr data-bind="attr: { 'class': packageSelected() ? 'success' : '' }"> 

列表:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Reserved_Words

+0

你是完全正確的,現在用''if''表達它工作正常。 Knockout.js文檔沒有提及它,它們的網站http://knockoutjs.com上的'if'語句的所有示例沒有引號,儘管它們聲明瞭IE6 +的框架作品,但似乎並非如此 – YMC

+1

@YMC:內部,淘汰賽確保引用綁定中的所有頂級屬性。它不能爲嵌套的對象文字做同樣的事情。這就是爲什麼正常淘汰賽如果綁定似乎沒有問題。你只需養成引用這些對象的屬性名稱的習慣。 –

+0

@Jeff Mercado我看到了,但是我的抱怨並不是因爲缺少錯誤信息,而是因爲缺少在自己的網站上引用「if」語句自己的示例 – YMC

相關問題