2013-01-24 3 views
0

편집 :이 답변 here는 솔루션을 제공 한 것 같습니다. 내가 게으른 잔디이고 두 곳에서 내 모델을 정의하는 것을 피하려고했기 때문에 (한 번 서버에, 한 번 고객에게) 나는 길을 찾아야했습니다. 링크 된 솔루션에서 사용자 지정 바인딩을 사용하여 다양한 폼 요소 데이터 바인딩 특성에서 만든 관찰 가능 항목을 가질 수 있으므로 기본적으로 폼에서 모델을 작성합니다. 따라서 이것은 폼에서 모델 정의를 효과적으로 유도합니다. 나는 이것이 나쁜 생각이라면 아직 결정하지 않았다. :)녹아웃보기 모델은 단일 개체를 나타 내기 위해

내가 뭘 잘못하고 있는지 궁금해한다. (실제로는 심지어 일을 잘못했다는 것을 알고있다). 난 그냥 몇 가지 간단한 텍스트/숫자 속성을 가지고있는 시간에 하나의 레코드를 편집하는 양식을 작성해야합니다 :

{ItemCode:ABCD,LotNumber:1234,ID:4885,MeasuredValue1:90} 

내가 그것을 할 매핑 플러그인 코를 사용하기로 결정했다. 나는 상당히 새로운 코입니다.

ko.applyBindings(lm); 

그것을 지금

var lm = new LotModel(); 

마지막으로 $ .ready (문서)에,

var LotModel = function() { 
    var self = this; 
    self.Update = function(itemcode,lotnumber) { 
    var data = { ItemCode: itemcode, LotNumber: lotnumber } 
//DoAjax is just a utility function and is working fine. 
     DoAjax("POST", "LotHistory.aspx/GetLotHistory", data, 
     function(msg) { 
      ko.mapping.fromJS(msg.d, null, self); 
      ko.applyBindings(self); 
     }, 
     function(xhr, ajaxOptions, thrownError) { 
      AjaxFailure(xhr, ajaxOptions, thrownError); 
     } 
     ); 
    } 
} 

그리고 나중에 내 코드에 : 어쨌든 나는이 같은 뷰 모델 끝났다 보기 모델에서 볼 수있는 경우를 제외하고는 데이터를로드 할 때마다 v30의 업데이트 기능에서 ko.applyBindings (self)을 다시 호출해야합니다. 그 줄을 주석 처리하면 바인딩되지 않습니다. 나는 라고 생각한다. 이것은 내가 단 하나의 객체 (즉, 뷰 모델 그 자체는 객체를 코 매핑 플러그인 이후에 그 객체로 만든다.)를 바인딩하기 때문이다. 그러나 모든 곳에서 나는 "당신은 단지 호출 할 필요가있다. 이걸 한번 해봐. " 그래서 나는 정말 명백한 것을 놓치고 있다고 느낄 수 없습니다. 문서 준비 함수에서 ko.applyBindings (lm)을 주석 처리하는 것은 document.ready에서 lm.Update를 자동으로 호출하지만 viewmodel에서 주석을 달아서 끊기 때문에 아무런 차이가 없습니다.

내 질문은 - 내가 잘못하고있는 것입니까? 그것은 한 번에 하나의 객체에 대한 과도한 형태의 바인딩인가요? 나는 그것이 너무 많이 신경 쓰지 않는다는 것을 의미한다. 나는 그것을 원하지만 그대로 작동한다. 나는 여전히 잔소리하고있다. ...

답변

1

피할 수 있다면 바인딩을 여러 번 다시 적용하지 않는 것이 가장 좋습니다. 문제는 당신이 viewmodel에서 관찰 가능한 속성을 가지고 있지 않다는 것입니다. 예컨대 ko.mapping.fromJS에 대한 초기 호출은이 문제를 해결할 수 있습니다 (또는 수동으로 관찰 가능한을 추가 할 수 있습니다) :

ko.mapping.fromJS({ 
    ItemCode: '', LotNumber: 0, ID: 0, MeasuredValue1: 0 
    }, null, self); 

가 작동 예를 들어 바이올린을 참조 : 보조에 대한 http://jsfiddle.net/antishok/qpwqH/1/

+0

감사합니다. 관측소가 존재하지 않는다는 것을 언급하면 ​​큰 단서를 얻을 수있었습니다. 가능한 해결책을 찾았습니다 [http://stackoverflow.com/questions/6735225/knockout-js-mapping-plugin-without-initial-data-empty-form]. –

관련 문제