2013-05-03 2 views
2

백본/마리오 네트 웹 응용 프로그램이 있습니다. 이 응용 프로그램은 최신 브라우저에서 잘 작동하지만 Underscore.js 라이브러리에있는 것이 아니라 내 코드에 깊은 라인에IE 8에서 "예기치 않은 식별자"와 함께 실패한 밑줄 템플릿

SCRIPT1010: Expected identifier 

과 IE8에서 디버거 점을 죽는다. 라이브러리에 문제가없는 것은 분명합니다. 코드가이 문제를 유발하고 있습니다. 이 라인은 이것입니다

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

무엇이 문제일까요?

답변

11

이 템플릿은 템플릿을 컴파일 할 때 현대적인 브라우저에서는 괜찮 았지만 IE8에서는 흔들리는 것을 의미하는 템플릿 중 하나에서 발견되었습니다.

우리는 serializeData의 때문에 같은 기능을 사용하여 몇 가지 유용한 문자열 우리의 관점에서 데이터를 전달하는 (커피 스크립트를하지만 당신은 아이디어를 얻을) :

... 
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> 
같은 템플릿

"continue"는 예약어입니다. Coffeescript는 멋지 며 인용 부호없이 객체 정의의 키로 사용할 수 있습니다. 더 현대적인 브라우저의 일반 JS에서는 따옴표로 묶지 않고 사용하는 것이 좋습니다. (일반적으로 그렇게하는 것이 좋지만).

그러나 IE8에서는 obj = {continue : "foo"}처럼 설정할 수 없으며 obj.continue처럼 표시되지 않을 수 있습니다. obj [ "continue"] 여야합니다.

{{messages.continue}}을 {{messages [ "continue"]}}로 바꾸거나 속성 이름을 바꾸면 문제가 해결되었습니다. 사람을 도움이

희망은 여기

+1

에게 같은 문제를 :). 나는'default' 예약어를 사용하고 있었다. –

+0

건배! 나는 잠시 머리를 긁적이며, 그 다음 이것을보고 4 문자를 변경했습니다. 전체 사이트가 다시 작동합니다! 우리는 원시 객체를 사용했습니다. 객체 [ 'new'] 대신에 템플릿에서 새로운 룩업을 사용했습니다. "필수적으로 비동기 적으로로드 된"AMD 모듈과 달리 CommonJS 모듈이 실제로 모두로드된다는 것을 보여주었습니다. 내가 본 이의 제기에도 불구하고 테스트 한 모바일 장치의 성능이 현저히 떨어지는 것 같지 않습니다. 그러나 어떤 페이지에서 어떤 오류가 잡히면 예상치 못한 이점이 있습니다. – trojjer

관련 문제