2014-09-02 2 views
1

제품 구성이 가능한 양식을 만들려고합니다. 예를 들어 위젯을 추가하면 제품 가격이 £ x이됩니다. 예 : Apple's configuration page. 다른 프로세서 또는 w/e를 선택하면 그에 따라 가격이 업데이트됩니다.변수를 업데이트 한 후 뷰 다시 렌더링

그래서 모델에 기본 가격이 포함 된 필드가 있으며보기에 표시되는 가격을 base_price + addons[]으로 설정합니다.

사용자가 일부 구성 설정을 변경하면보기에서 가격을 업데이트하는 방법을 알 수 없습니다. 변수의 값을 변경할 수는 있지만보기에 표시된 내용을 업데이트하는 방법을 모르겠습니다.

뷰의 임베디드 루비 코드가로드 될 때만 호출된다는 것을 알기 때문에 표시된 가격은 항상 total_price 변수의 원래 값입니다. 나는 Javascript가 필요할 것이라고 추측하고 있지만 레일즈에 이와 같은 일을하는 조항이 있는가?

감사합니다.

+0

이 작업을 수행하려면 많은 JavaScript가 필요합니다. 어쩌면 당신은 당신의 페이지를 [Angular] (https://angularjs.org/)로 향상시킬 수 있습니까? – tadman

+0

@tadman 따라서 백엔드에서 루비에서 변수를 사용하는 대신 기본적으로 데이터를 복제해야합니다 (두 세트의 데이터를 하나씩 루비에 포함하고 다른 하나는 루비 변수를 반영하는 각도로 표시). 각도 변수를 사용하여 뷰를 업데이트해야합니다 ? –

+0

JavaScript는 JavaScript를 사용하여 조작하지 않는 한 본질적으로 정적입니다. [HTML 데이터 속성] (https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes)을 사용하면 일반적으로 올바른 프리젠 테이션으로 HTML 문서를 생성 할 수 있으며 JavaScript는 계산을 수행하는 데 사용할 수 있습니다. 일반적으로 클라이언트 변경에 즉각적으로 응답하는 JavaScript의 클라이언트 측과 데이터베이스에 저장하기 전에 최종 집계를 수행하는 다른 서버 측의 두 가지 구현이 필요합니다. – tadman

답변

1

예, 양식에 remote : true 옵션을 추가 한 다음 데이터가 ajax를 통해 서버로 전송되고 컨트롤러에서 처리 된 후에는 확장자가 .html.js 인보기를 렌더링 할 수 있습니다. 이 같은 현재보기를 업데이트하는 일부 자바 스크립트 코드를 삽입 :

가 아약스 호출 후보기로 반환 될 때 자바 스크립트의 조각은 (당신이 ERB를 통해 일부 루비 향상시킬 수 있음)를 실행하는지
$("#total-price").replaceWith("<%= j(render(partial: 'location', layout: false)) %>"); 

.

이것은 레일이 제공하는 매우 강력한 도구입니다.

관련 문제