2012-07-20 7 views
0

Grails 컨트롤러에서 Knockout을 사용하여 JSON 데이터를 데이터 바인딩에 바인딩하려고합니다. 나는 반환되는 JSON 좋은 생각 :녹아웃 바인딩 json, 속성을 구문 분석 할 수 없습니다.

 var Directory = { 
     list: ko.observableArray([]) 
     }; 

     var Person = function(id, first, last) { 
     this.id = ko.observable(id); 
     this.firstName = ko.observable(first); 
     this.lastName = ko.observable(last); 
     }; 

     var loadPeople = function() { 
     $.ajax({ 
      url: "${createLink(action: "getPeople")}", 
      type: "post", 
      contentType: "application/json", 
      success: function(result) { 
      for(p in result) { 
       Directory.list.push(new Person(p.id,p.firstName,p.lastName)); 
      } 
      ko.applyBindings(Directory); 
      } 
     }); 
     }; 

     loadPeople(); 

그리고 마지막으로, 내 마크 업 : 제가 비슷한 질문에 고개 시도했습니다

  <table> 
      <thead> 
      <tr><th>Id</th><th>First name</th><th>Last name</th></tr> 
      </thead> 
      <tbody data-bind="foreach: list"> 
       <tr> 
       <td data-bind="text: id"></td> 
       <td data-bind="text: firstName"></td> 
       <td data-bind="text: lastName"></td> 
       </tr> 
      </tbody> 
     </table> 

여기

result 
[ 
Object 
class: "project.Person" 
firstName: "Bill" 
id: 2 
lastName: "Fake" 
__proto__: Object 
, 
Object 
class: "project.Person" 
firstName: "Dale" 
id: 3 
lastName: "Fake" 
__proto__: Object 
, 
Object 
class: "project.Person" 
firstName: "Linda" 
id: 4 
lastName: "Fake" 
__proto__: Object 
] 

내 자바 스크립트입니다 list.Person, Person, 관측 가능한 배열을 Directory 대신 바인딩에 전달합니다. 디버그 할 때 Directory.list()에는 크기 3 Person의 배열이 포함되어 있으므로 올바른 것으로 보입니다.

오류 : 어떤 도움에 감사드립니다

Uncaught Error: Unable to parse binding attribute. Message: ReferenceError: id is not defined; Attribute value: text: id

.

답변

1

콘솔에서 결과 블록을 어디서 가져 왔습니까? 그것은 유효한 JSON이 아니지만 유효한 javascript 객체처럼 보입니다. 당신은 그런 호출에서 바인딩을 적용해서는 안됩니다. 일반적으로 domReady에서 발생합니다. 그 후, viewModel가 자동적으로 바인딩을 갱신합니다. 그게 전부입니다.

어쨌든, 이것을 a fiddle에 던졌으며 정상적으로 작동합니다. 뭔가 다른 일이 벌어지면 코드가 깨집니다.

관련 문제