2013-08-07 3 views
0

바인딩 원격 소스에서 JSON을 얻을KnockoutJS 내가이 jQuery를 가지고 매핑 플러그인이 문제

function c(){if(0<arguments.length)return c.equalityComparer&&c.equalityComparer(d,arguments[0])||(c.K(),d=arguments[0],c.J()),this;a.q.bb(c);return d} 

.each은 인덱스> 100까지 실행되므로 행 집합이 반환됩니다. 여기

내 JSON의 작은 조각 (I 수동으로 var sUrl에서 URL을 명중이다. 난 그냥 가장 좋은 방법은 좋은 테이블이 JSON을 구문 분석하는 것입니다 어떤 단서가 없다

([{ "0":"C551003", 
     "id":"57024", 
     "1":"0373", 
     "number":"373-NIK", 
     "2":"1349078013", 
     "date_time":"1349078192", 
     // etc. 
},{ // next item 

I 그것은 나에게 뷰 모델의 행의 배열을 줄 것이라고 생각 나는 같은 것을 할 수 있다는 것을 : http://knockoutjs.com/documentation/foreach-binding.html 을하지만 매핑이 일했다면 나는 아무 생각이없고 어떻게 인스턴스에 대한 number 소품에 결합 할 수

<tbody data-bind="foreach: iHaveNoClue"> 
    <tr> 
     <td data-bind="text: 0"></td> 
     <td data-bind="text: id"></td> 
     <td data-bind="text: 1"></td> 
     <td data-bind="text: number"></td> 
     <td data-bind="text: 2"></td> 
     <td data-bind="text: date_time"></td> 
    </tr> 
</tbody> 
.

답변

2

참고 사항 : 이름이 숫자 인 속성이 있으므로 text bindingHandler를 작동 시키려면 일부 농구대를 뛰어 넘어야합니다. 한 가지 방법은 text: 1text: $data['1']으로 대체하는 것입니다.


올바른 길을 가고 있습니다.

<tbody data-bind="foreach: $root"> 

는 예를 들어 this fiddle를 참조하십시오 iHaveNoClue은 .e.g, $root로 대체 할 수 있습니다. 이는 viewModel 자체가 ko.mapping 플러그인에 의해 observableArray으로 만들어지기 때문에 작동합니다.


대체 솔루션 또는
, 당신은 단지 항목 당신이 AJAX 요청을 얻을 물건 관찰 배열을 보유 뷰 모델을 만들 수 있습니다. 보기 모델은 다음과 같이 구성 할 수있다 :

var viewModel = { 
    title: ko.observable("My title"), 
    items: ko.mapping.fromJS(data) 
}; 

해당 버전의 데모 this fiddle를 참조하십시오. 이 예제에서 viewModel은 단순한 객체이지만보다 복잡한 뷰 모델을 생성하는 생성자 함수를 만들 수도 있습니다.

+1

안녕하세요, Jeroen, 답장을 보내 주셔서 감사합니다. 나는 var viewModel = ko.mapping.fromJS (data); 대신에'var viewModel = ko.mapping.fromJSON (data);'을 가지고 있었고'ko.applyBindings (viewModel); '을 잊어 버렸다. 당신의'$ root'가 그것을 고쳤습니다! 다시 한 번 고마워, 내 하루 만들었 어! –

+0

아우. 나는 작은 벌레를 알아 차렸다. 0,1,2와 같은 viewmodel 속성은 jsFiddle에서 구문 분석되지 않습니다. 작동하지 않습니다. –

+1

아, 네 말이 맞아. 하지만 그것은 별개의 문제입니다. 나는 그 문제를 설명하기 위해 나의 대답과 연결된 피들을 업데이트했다. – Jeroen