2012-10-11 3 views
3

나는 복잡한 XML 파일로 많은 작업을 요구하므로 SimpleXML 배열, JSON으로 변환하고 Ajax를 통해 Knockout으로 전달합니다.KnockoutJS : 불법적 인 이름을 가진 객체에 바인딩

문제는 각각의 속성이 속성을 가지고 있기 때문에 SimpleXML이 @attributes이라는 객체를 사용한다는 것입니다. 내가 myObject()[email protected]처럼 결합 할 때, 나는 '@attributes', ['@attributes'], [@attributes]을 시도했지만 아무것도 작동하지

Message: SyntaxError: Unexpected token ILLEGAL; 
Bindings value: text: alertObj()[email protected] 

오류를 얻을. 나는 또한 다양한 이스케이프 문자와 유니 코드 이스케이프를 시도했다. 내가 어떤 식 으로든 구조와 이름을 변경하지 않도록하고 싶습니다

 var alertObject = 
      { 
       "@attributes": 
        { 
         "DescriptionContentType":"text\/plain", 
         "Description":"", 
         "IsActive":"true", 
         "Name":"Apache Requests Per Interval" 
        }, 
       "Frequency": 
        { 
         "PeriodInSeconds":"60" 
        }, 
       "MetricLevelNotification":"false", 
       "AlertTriggerMode":"2", 
       "CautionActionDelay":"0", 
       "DangerActionDelay":"0", 
       "CautionActionList": 
        { 
         "ActionID": 
          { 
           "ManagementModuleName":"Base Module", 
           "ConstructName":"Base SMTP Mail Action" 
          } 
        }, 
       "DangerActionList": 
        { 
         "ActionID": 
          { 
           "ManagementModuleName":"Base Module", 
           "ConstructName":"Base SMTP Mail Action" 
          } 
        }, 
       "MetricGroupingID": 
        { 
         "ManagementModuleName":"Base Module", 
         "ConstructName":"Apache Requests Per Interval" 
        }, 
       "AlertCombineOperator":"1", 
       "AlertCompareOperator":"2", 
       "CautionTargetValue":"2000", 
       "DangerTargetValue":"15000", 
       "CautionMinNumPerPeriod":"3", 
       "CautionAlertPeriod":"6", 
       "DangerMinNumPerPeriod":"1", 
       "DangerAlertPeriod":"1" 
      }; 

:

는이 같은 JSON 보이는 것입니다.

어떻게하면 되나요? 유효한 자바 스크립트 변수 이름이 아니므이다

답변

5

:

식별자가 $로 시작해야합니다 _ 또는 유니 코드 카테고리 "대문자 (루)"의 모든 문자, "소문자 (Ll) ", "제목 케이스 문자 (Lt) ","수정 자 문자 (Lm) ","기타 문자 (Lo) ", 또는"문자 번호 (Nl) ".

http://mathiasbynens.be/notes/javascript-identifiers

에서 변수 이름은 @로 시작할 수 없습니다 따라서 당신은 오류를 참조하십시오. 작은 따옴표, 대괄호 또는 다른 것을 추가 할 필요는 없습니다. 변수 이름은 유효하지 않으므로 서버에서 데이터가 리턴되는 방식을 변경해야합니다.

+0

이는 의미가 있습니다. 나는 json을 인코딩하기 전에 서버 측에서 배열을 변경할 것이다. 감사. – solefald

1

나는 비슷한 문제에 직면했으며, 서버에서 데이터가 반환되는 방식을 확실히 변경해야한다는 것에 전적으로 동의합니다. 그러나 실제로 데이터를 제어 할 수 없거나 잠시 동안 데이터에 영향을 줄 수없는 경우 다음을 사용하여 원하는 것을 렌더링 할 수 있습니다.

$data['@attributes'].Name