2017-03-16 10 views
1

을 잃고 선택합니다. 나중에이 옵션을 바꾸기 위해 전화를 겁니다. 옵션은 잘 대체됩니다.리프트 ReplaceOptions의 원인은 내가 핸들러와 선택을 설정하려면이 호출을 행동

val options:List[(String,String)] = List(("3","test"),("4","test2")) 
ReplaceOptions("drugSelect", options, Empty) 

그러나 ReplaceOptions를 호출하면 선택 필드에서 선택하면 처리기에 대한 콜백이 더 이상 발생하지 않습니다. html은 다음과 같습니다.

<div data-lift="marketplace.AutoComplete.getNames"> 
    <input id="drugSearch" type="text" class="input-large"> 
    <div> 
     <label for="drugSelect">Select Drug:</label> 
     <select id="drugSelect"></select> 
    </div> 
    <div id="drugMessage">Messages</div> 
</div> 

아이디어가 있으십니까?

답변

0

Lift 옵션 렌더링이 서버 측 값으로 다시 매핑되는 각 옵션에 대해 일회성 값을 생성한다는 근본적인 이유가 있습니다. 그래서 ReplaceOptions이되면 그 고유 한 값을 잃게되고 서버는 더 이상 제출 된 내용을 이해할 수 없게됩니다.

여기 해결책은 ajaxUntrustedSelect입니다. 컬렉션의 값을 HTML로 직접 파이프하여 그대로 제출할 수 있습니다. 또한 제출 된 옵션이 원래 목록에 있는지 콜백을 필터링하지 않습니다. 다소 안전하지는 않지만 위와 같이 ReplaceOptions을 사용할 수 있습니다.

select 요소의 컨테이너 주변에 idMemoize을 사용하고 선택 옵션을 업데이트해야 할 때 idMemoize을 다시 렌더링하는 것이 좋습니다.