1

맵핑 플러그인을 사용하여 수동 또는 자동으로 뷰 모델을 정의한 경우 나중에 프로토 타입을 사용하여 뷰 모델을 "확장"(속성/기능 추가)에 문제가 있습니까?프로토 타입이있는 녹아웃 뷰 모델 확장

매핑 플러그인의 콜백을 알고 있습니다. 대신 프로토 타입을 사용한다는 의미가 있는지 알고 싶습니다. 내가 부탁하는 이유는 서버 측 코드에서 뷰 모델의 많은 부분을 생성하기 때문입니다. 그러나 때로 초기 모델보다 뷰 모델을 나중에 확장해야합니다.

+1

실제로 프로토 타입을 통해 함수를 추가하는 것이 좋습니다. – Tyrsius

답변

2

나는 이것에 문제가 있다고 생각하지 않는다. 필자는 대응하는 구조화 된 JSON에서 매핑 플러그인을 통해 인스턴스화 된 큰 딥 뷰 모델 그래프로 작업하고, 프로토 타입을 사용하여 유용한 속성 및 toJSON을 가진 "AbstractViewModel" 다른 것보다 우선합니다.

1

아무런 문제가 없습니다. viewModel의 특정 필드에 데이터가없는 경우보기가 적절하게 응답하는지 확인하십시오.

1

이 문제를 해결하는 데는 몇 가지 방법이 있습니다. ( 을 : 당신은 녹아웃 및 관찰 개체 자체를 통해 호출 할 익스텐더를 추가 할 수

ko.utils.extend(ViewModelClass.prototype, { 
    newPrototype1: function() { ... }, 
    newPrototype2: function() { ... } 
} 

을 또는 :

하나를 들어, 단일 개체보기 모델을 취할 수 및 프로토 타입을 통해 그들을 utils.extend http://knockoutjs.com/documentation/extenders.html)

ko.extenders.numeric = function(target, precision) { 
    ...details in link above... 
} 

... 
self.NumericProperty = ko.observable(data).extend({ numeric: 0 }); 
... 

또는 관찰, observableArray 계산 ... (http://knockoutjs.com/documentations/fn.html)

,617의 모든 인스턴스에 사용할 수있는 함수를 만들
ko.observable.fn.filterByProperty = function(propName, matchValue) { 
    return ko.computed(function() {  
     ...details in link above... 
    }, this); 
} 

나는 이러한 조합을 사용하는 경향이 있습니다. 나는 VM 및 매핑에서 별도의 파일에보기 모델의 프로토 타입을 확장 좋아, 그래서

  • 뷰 모델 (들)과 같은 구조가
  • 의 ViewModel이 (들)
  • 뷰 모델을 .Mappings.js 된 .js가 .Prototypes.js

이 '답변'사이의 시간대는 다소 크기 때문에 일부 사항은 변경되었지만 일부 항목은 동일하게 유지됩니다.