2017-03-16 4 views
1

を失うことを選択します。リフトReplaceOptionsの原因は、私はこのコールハンドラで選択を設定するために作るアクション

val options:List[(String,String)] = List(("1","test"),("2","test2")) 
"#drugSelect" #> ajaxSelect(drugOptions, Empty, handler) 

この時点で私は、リスト内で何かを選択することができますし、ハンドラが呼び出されます。後で、私はオプションを置き換えるためにこの呼び出しを行います。オプションはちょうど良いと置き換えられます。

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を使用することができます。

もう1つの可能性は、要素のコンテナを使用して、idMemoizeを再表示して、選択オプションを更新する必要がある場合です。

関連する問題