トラフィック プロジェクトに grails を使用しています。グレイルズは初めてです!
hasroadとhasrailの 2 つのブール値を持つドメインStationがあります。ステーションコントローラーでは、次の方法を使用します。
def hasroadhasrail() {
def station = Station.get(params.stationid)
def response = ['hasroad': station?.hasroad, 'hasrail': station?.hasrail]
render response as JSON
}
次に、ステーションにリンクされているドメイントラフィックがあります
Station station
たくさんのデータで。道路/レール データがない場合、入力フィールドは無効になり、グレー表示されます。
私はjquery 1.8.0を使用しています
トラフィックの _ form.gspでの ajax 呼び出しは次のようになります。
<script>
$(document).ready(function(){
// correct for create
$("input.data1").prop('disabled', ${trafficInstance?.station?.hasroad ?: true});
$("input.data2").prop('disabled', ${trafficInstance?.station?.hasrail ?: true});
$("#station").change(function() {
$.ajax({
type: "POST",
url: "${createLink(controller: 'station', action: 'hasroadhasrail')}",
data: { stationid: $(this).val()}
}).done(function( response ) {
if (response.hasroad) {
$("input.data1").prop('disabled', false);
$('input.data1').css('background-color', 'white');
}
else {
$("input.data1").prop('disabled', true);
$('input.data1').css('background-color', 'grey');
}
if (response.hasrail) {
$("input.data2").prop('disabled', false);
$('input.data2').css('background-color', 'white');
}
else {
$("input.data2").prop('disabled', true);
$('input.data2').css('background-color', 'grey');
}
});
});
})
</script>
これは、トラフィックの _ form.gspにもあるステーションのドロップダウンです。
<li class="fieldcontain ${hasErrors(bean: trafficInstance, field: 'station', 'error')} required"> <span class="lbl">Station</span>
<g:select id="station" name="station.id" from="${trafproj.Station.list()}" optionKey="id" required="" value="${trafficInstance?.station?.id}" class="many-to-one" noSelection="['':'-Choose station-']"/>
</li>
新しいトラフィック データを作成すると、すべてが完全に機能します。ドロップダウンからステーションを選択しました。たとえば、このステーションのhasroadが false の場合、入力フィールドは無効になり、グレー表示されます。上記のコードはすべてうまく機能します。
今私の問題:以前に作成したトラフィックを編集すると、ステーションのドロップダウンにステーションがすでにロードされています。変更がないため、ajax はすぐには機能しません。ドロップダウンでステーションを再度変更すると、すべて正常に動作します。
ドロップダウンが変更時だけでなく、ステーションが最初にロードされたときにも機能することを追加する必要がありますか?