2011-08-15 8 views
2

일부 항목이있는 목록을 상상해보십시오. 각 항목은 영화이며이 포함모델에서 데이터를 변경하는 가장 좋은 방법은 무엇입니까?

  • 별 (1-5)
  • 을 가진 순위 내 목록 버튼
  • 댓글을 남길 수있는 텍스트 상자에 추가 제목

을 수행 할 수 있습니다 방법 :

  • 가) 항목 모델의 메소드를 호출합니다 다음은 buttonClicked 이벤트를 수신 할 것이다 다음 "모델"이 항목에 대한 때문에 movieId을 지정할 필요가 없습니다

    onClick: function(event){ 
        this.model.addToMyList(); 
    } 
    

    . 다른 경우에는 모델이 모든 항목에 적용됩니다. 목록은은 buttonClicked 이벤트를 전달하는 항목에 대한 청취 할

  • B, 이벤트에서 데이터를 가져 와서 모델의 메소드를 호출합니다 :

    model.addToMyList(movieId) 
    
  • C 목록이 이벤트는 항목의 인덱스 (즉, 영화의 ID가 아닌)를 계속 가져오고 목록의 색인을 사용하여 movieId를 찾고의 메소드를 호출합니다. 모델 :

    model.addToMyList(movieId) 
    
+0

"최고"란 무엇을 의미 할 수 있습니까? – Iterator

+0

유연한 (재사용 가능) 및 성능 –

+0

좋은 질문입니다. 나는 이것에 대해 무지하지만, 그 답은 나를 도울 것이다. 특히 재사용 성의 핵심 문제이다. – Iterator

답변

1

나는 언어를 중립적 인 응답을 줄거야, 그래서 당신은 어떤 언어를 언급하지 않습니다.

권장하지 않음 C : 목록에서 색인으로 항목을 식별하는 것이 쉬운 옵션처럼 보일 수 있지만 확장 기능 또는 유지 관리 기능이 나중에 지저분해질 수 있습니다 (갑자기 목록을 주문하고 사용자가 목록을 필터링하는 등).

유지 보수 가능성 (선점 형 디자인이 아닌 디자인에 더 잘 적응할 수있는 디자인)을 염두에두면 이벤트 처리기가 처리되는 항목을 식별하는 것이 가장 좋습니다. 그렇게하면 모든 항목에 적용 할 처리기를 수정할 수 있습니다.

With B : 컨트롤/구성 요소가 컬렉션 변경 (INotifyCollectionChangedin .net)을 수신한다는 의도로 변경되는 컬렉션에 대해 더 많이 예약 할 것입니다. 따라서이 컬렉션에서 수행하려는 특정 작업이 있는지 여부를 알지 못하는 것은 어렵지만 컬렉션 (데이터 모델로 변경)이 다른 측면을 결정하지 않는 한 내 첫 번째 선택이 아닐 것입니다.

그래서 마음에 위의와, (이것은 AB 하이브리드 같은 소리가 있지만 일반적으로 사용되는 용액) : 이벤트 핸들러에 가입되어 생성 된 새 항목 (단지 코드는 하나 이벤트 핸들러)과의 통과 item-row 자체에 대한 참조 또는 식별자.취급 목록을 통해 변경해야한다는

onClick: function(MyEvent e) 
{ 
    this.model.addToMyList(e); //or this.model.addToMyList(e.ID) 
} 

그래서 당신은 유지하기 위해 동일한 이벤트, 하나의 이벤트 핸들러 및 구명 할 수있는 능력에 가입 여러 항목이 : 그래서, 그것의 가능한 경우에는보고 할 것 필터, 분류 등

+0

이것은 자바 스크립트 * –

관련 문제