편집 :이 답변 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에서 주석을 달아서 끊기 때문에 아무런 차이가 없습니다.
내 질문은 - 내가 잘못하고있는 것입니까? 그것은 한 번에 하나의 객체에 대한 과도한 형태의 바인딩인가요? 나는 그것이 너무 많이 신경 쓰지 않는다는 것을 의미한다. 나는 그것을 원하지만 그대로 작동한다. 나는 여전히 잔소리하고있다. ...
감사합니다. 관측소가 존재하지 않는다는 것을 언급하면 큰 단서를 얻을 수있었습니다. 가능한 해결책을 찾았습니다 [http://stackoverflow.com/questions/6735225/knockout-js-mapping-plugin-without-initial-data-empty-form]. –