0

[jquery dual listbox plugin]を使用して box2 (許可) に box1 (利用可能) のオプションを設定 する Grails プロジェクトがあります。

私の問題は、既に存在する (更新中の) レコードの場合、既に選択されているオプションがボックス 2 に表示されないことです。すべてのオプションは、まだ選択されていないかのようにボックス 1 に表示されます。選択したオプションを box1 (使用可能) から削除し、box2 (許可) に表示するにはどうすればよいですか?

jquery デュアル リスト プラグインは、[Grant/Deny] ボタンが使用されている場合、項目を box1 から box2 に、またはその逆に移動する限り機能しています。

edit.gsp の Javascript:

$(function() {
    $.configureBoxes({
        transferMode: 'move',
        useFilters: false,
        useCounters: false,
        box1View: 'available',
        box2View: 'granted',
        to1: 'toAvail',
        to2: 'toGranted'
    });
});

edit.gsp で次のように選択します。

<table>
        <tr>
            <td>
                Available<br/>
                <g:select name="available"
                          id="available"
                          from="${availableList}"
                          value="${user?.granted}"
                          optionKey="id"
                          multiple="multiple"
                          style="height:200px;"
                />
            </td>
            <td>
                <button id="toGranted" type="button" class="button_right">Grant</button>
                <br/>
                <button id="toAvail" type="button" class="button_left">Deny</button>

            </td>
            <td>
                Granted<br/>
                <g:select name='granted'
                          id="granted"
                          from="[]"
                          multiple="multiple"
                          style="height:200px;" />
            </td>
        </tr>
    </table>

もう少し複雑にするために、ボックス 1 (使用可能) は、edit.gsp 内の別の選択からの onChange イベントから入力される場合があります。

<g:select name="parent" id="parent"
                              from="${Parent.list()}"
                              optionKey="id"
                              noSelection="[null:'']"
                              value="${user?.parent}"
                              onchange="${remoteFunction(
                                    controller: 'user',
                                    action: 'ajaxGetAvailable',
                                    onSuccess: 'updateAvailable(data)',
                                    params: '\'id=\' + this.value')}"
                    />

function updateAvailable(data) {
  var $element = $('#available');
  var $granted = $('#granted');
  $element.empty();
  $granted.empty();
  $.each(data, function(i, item) {
    $element.append($('<option>').val(data[i].id).text(data[i].name))
  });
}

上記の関数は、コントローラーからの JSON オブジェクトを使用します。

   def ajaxGetAvailable = {
        def parent = Parent.get(params.id)
        render parent?.available as JSON
   }

上記のクラス:

class Parent {
   static mapWith = "mongo"

   String entityId
   String name

   static hasMany = [ available: Entity ]
}

class Entity {

  static mapWith = "mongo"

  String entityId
  String name

  static belongsTo = [parent:Parent]
}
4

2 に答える 2

0

この問題は、Available と Granted の両方の選択を更新することで解決されました。「from」でGroovyを使用して、GrantedオプションをAvailableオプションから削除していることに注意してください。

<g:select name="available"
          id="available"
          from="${availableList - user?.granted}"
          value="${user?.granted}"
          optionKey="id"
          multiple="multiple"
          style="height:200px;"
 />

<g:select name='granted'
          id="granted"
          from="${user?.granted}"
          multiple="multiple"
          optionKey="id"
          style="height:200px;" 
 />
于 2013-08-27T19:30:18.310 に答える
0

あなたの許可された選択にはこれがありますfrom="[]"fromデータベース (またはどこにでも) に保存した、既に許可されているアイテムのコレクションが含まれるように、 を変更する必要があります。

availableListまた、 (コントローラーで) ビューをレンダリングする前に、付与されたアイテムをフィルターで除外する必要があります。

于 2013-08-16T21:31:33.973 に答える