2010-07-01 4 views
2

두 가지 모델 A와 B가 있습니다.이 경우 B를 업데이트하면 모델 코드에서 A가 업데이트되기도합니다. 이제 UI에서 동일한 페이지에 A 및 B를 표시하고 자체 작업 (예 : 일부 필드 업데이트)을 수행 할 수 있습니다. 모든 업데이트에서 전체 페이지를 새로 고침하고 싶지 않습니다.다음 시나리오에서 Ajax가있는 Ruby on Rails의 좋은 디자인 패턴은 무엇입니까?

제 질문은 : A와 B의 UI 코드를 구분하고 싶습니다. 다른 코드를 참조하는 A 또는 B의 코드를 갖고 싶지 않습니다. 이 요구 사항에 대한 설계가 가능합니까? 감사.

답변

0

대부분의 Rails 헬퍼는 페이지의 특정 섹션을 업데이트한다고 가정합니다. 가장 직접적이고 효율적인 방법은 A 레코드와 B 레코드의보기 요소를 모두 포함하도록 "특정 섹션"의 범위를 확장하는 것입니다. (당신이 언급 한 것처럼 페이지 전체가 될 수 있습니다.)

효율성이 높을수록 복잡성이 더 커질 수 있습니다. 나는 이것이 내 대답에도 적용된다고 말하고 싶다.

여기서 즉각적인 생각은 일반적인 이벤트 메커니즘입니다. 기본적으로 AJAX 호출을 발행하여 평상시와 마찬가지로 업데이트하고 응답에는 특정 A 또는 B 레코드에 대한 업데이트가 포함 된 여러 반환 값이 들어 있습니다. 예를 들어 :

{ "A": [ 
    { "id": 23, "content": "<span>name:</span> Apples" }, 
    { "id": 52, "content": "<span>name:</span> Oranges" } 
    ], 
    "B": [ 
    { "id": 10, "content": "<span>name:</span> Fruits" } 
    ] 
} 

다음, AJAX는 발행 모두에 대한 업데이트 및 B-기록을 요구하고, 그들의 반응은 단일 자바 스크립트 함수에 의해 처리됩니다. 그런 다음 단일 함수가 원하는 별도의보기 구성 요소로 업데이트를 전달합니다. 간단한 이벤트 처리기라고 생각하십시오.

이것을 구현하는 가장 간단한 방법은 페이지로드시 각보기 구성 요소에 '업데이트'기능을 등록시키는 것입니다. 그런 다음 이벤트 핸들러는 JSON 객체를 사용하여이 모든 것을 호출합니다. 그런 다음 업데이트 기능은 원하는 것을 가져 와서 관리하는 특정 요소를 업데이트하고 설정합니다.

1

좋아, 그래서 질문은 : A의 업데이트에 대한 컨트롤러는 B와 반대에 대해 알고 안, 아직

에게 내 포인트가 컨트롤러에 요청이 페이지를 수행 할 것 페이지 B.를 업데이트해야 작업. 그런 다음 변경 (또는 다시 렌더링)에 대한 성공적인 왕복 요청 B를 수행 한 후. 그 2 개의 여행.

또는 A 또는 B 모델에서 서로를 인식하지 않고도 페이지의 두 부분이 모두 업데이트됨을 나타내는 A 및 B 컨트롤러에서 rjs가 응답 할 수 있습니다.