2013-05-03 60 views
2

我們有一個Backbone/Marionette Web應用程序。該應用程序工作正常,在現代瀏覽器,但IE8死與下劃線模板IE 8中的「意外標識符」失敗

SCRIPT1010: Expected identifier 

調試器指向深處Underscore.js庫,而不是我的代碼行。顯然,圖書館沒有問題 - 我們的代碼觸發了這個問題。線路是這樣的

var render = new Function(settings.variable || 'obj', '_', source); 

問題是什麼?

回答

11

事實證明,這是我們模板中的一個特定情況,這意味着模板編譯時,代碼在現代瀏覽器中很好,但在IE8中投擲搖擺不定。

我們從我們的視圖中使用像這樣的serializeData功能傳送數據與一些有用的字符串(CoffeeScript的,但你的想法):

... 
serializeData: -> 
    data = super() 
    data.messages = { 
     intro: "Welcome to the app" 
     continue: "Click here to continue" 
    } 
    return data 
... 

然後引用,在像這樣

<h1>{{ messages.intro }}</h1> 
<a href="...">{{ messages.continue }}</h1> 
模板

問題來自「繼續」是一個保留字的事實。 Coffeescript是很好的,它允許你在沒有引用的情況下將它用作對象定義中的一個鍵,並且在更現代的瀏覽器中,它會出現在常規的JS中,它們可以不加引號地使用它(儘管通常會推薦這麼做)。

然而,在IE8中,你可能不會像obj = {continue:「foo」}那樣設置它,你可能不會像obj.continue那樣得到它,它必須是obj [「continue」]。

用{{messages [「continue」]}}替換{{messages.continue}}或重命名該屬性解決了問題。

希望幫助這裏有人:)

羅布

+1

同樣的問題。我正在使用'默認'保留字 – 2013-07-01 12:07:58

+0

乾杯!我撓了一下頭,然後我看到了這一點,並改變了4個字符 - 整個網站再次運作!我們在模板中使用原始對象。新查找而不是對象['new']。 作爲一個旁註,它說明了CommonJS模塊確實全部被加載,不像AMD模塊那樣「根據需要異步加載」。儘管我看到了異議,但我們測試過的移動設備的性能似乎沒有明顯下降。但是,從任何頁面捕獲錯誤都會帶來一定的無法預料的好處。 – trojjer 2013-09-25 12:01:02