2013-07-30 1 views
0

컨트롤러에 충돌하지 않고 선택 메뉴를 새로 고침하고 컨트롤러에서 전체 선택 메뉴를 다시 생성 한 다음 해당 Div에 다시 보 낼 수 있습니까? 컨트롤러에서 JSON 형식의 데이터를 전송할 수 있지만 전체 Div를 보내지 않으려 고합니다 ... DRY 원칙이 깨졌습니다. 이것은 매우 일반적인 시나리오입니다, 선택 메뉴를 JS에서 어떤 객체를들을 수 있도록 할 수 있는지 궁금합니다. 객체가 수정되면 그에 따라 선택 메뉴를 새로 고칩니다. 객체는 다음과 같이 만들 수 있습니다. {value, text} etc ... 포인터가 있습니까?자동 새로 고침 웹 앱에서 메뉴를 선택하십시오.

웹 응용 프로그램에서 선택이 생성되는 방식은 무엇입니까?

우리는 선택 메뉴를 사용하여 이러한 형태를 많이 가지고 있습니다. 우리는 선택을 다른 파일에 쓰고 다시 호출하는 경향이 있습니다.

<div id=unique id> 
<for each in some model> 
    <option> <value> 
</div> 

왜 다시 사용하지 않습니까? 1) 내용을 선택하지 않고 새로 고침을해야하기 때문에 2) 기본 페이지에서 가져온 데이터는 사전에서 가져온 것입니다 (DB에서 미리 채워짐). 새로 고침시 DB 직접 데이터를 가져올 수 있습니다. ..

그래서 건조한 원리를 고수하면 일부 UI 리스너가 SELECT 내용을 일부 Object에 채울 수 있습니까? 개체가 변경된 경우 새 값으로 선택을 새로 고칩니다. 나는 새로운 AJAX를 작성하여 새로운 SELECT MENU의 JSON을 얻는다.

+0

대답은 '예 아마 이해하지만 우리는 더 자세한 경우 필요 당신은 더 정확한 응답을 원합니다. 귀하의 질문에서 나는 컨트롤러가 (아마도 일부 MVC 시스템), 정확하게 관련이없는 부분에 보낸 아약스 요청의 응답에서 채울 선택, 어딘가에 만 이해합니다. – zozo

답변

1

무엇에 대해 :

$.each(jsonData, function(index){ 
    $('select').append('<option value="'+jsonData[index].value+'">'+jsonData[index].text+'</option>'); 
}); 
JSON 데이터처럼 보이는 경우

:

[ 
    { 
    "value":1, 
    "text":"Text for First Item" 
    }, 
    { 
    "value":2, 
    "text":"Text for 2nd Item" 
    } 
] 

희망 나는 당신의 질문 ;-)

+0

예. 필요한 것입니다. 이 jsonData에 select를 바인드 할 수 있고 jsonData가 변경되는지 궁금합니다. – Nishant

+0

그런 다음 새로운 수신 json 데이터를 마지막으로받은 데이터와 비교하고 비교해야한다고 생각하십시오. – Bernhard

+0

Angular.js는이를 수행 할 수있는 inbuilt 방법이 있다고 생각합니다. 그들은 클라이언트 측에서 MVC 프레임 워크를 사용합니다. 비교가 트릭입니다. 비교할 때? 이상적으로 그것은 변수가 X라는 Select로부터 채워져 있어야합니다. X Changes Changes를 선택하면 이벤트와 비슷하지만 등록해야합니다 ... 조금 복잡합니다. 또한 우리는 메모리 누수를 피하기 위해 페이지 밖으로 탐색 할 때 이벤트를 파괴하려고합니다. – Nishant