[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]
}