2014-07-11 6 views
2

Итак, у меня есть один класс домена и у него много полей. У меня есть пять выпадающих списков в GSP, и данные фильтруются по onChange любого из drop- но проблема есть. Для нескольких наборов комбинаций, выбранных в раскрывающихся списках, у нас нет данных в базе данных, и эти комбинации не фиксированы.Зависимые выпадающие списки с одним классом домена в Grails

Итак, я подумал, возможно ли, что после выбора в первом выпадающем списке (или в любом из выпадающих списков) остальные выпадающие значения занимают значения в зависимости от первого выбора (что означает, что в других раскрывающихся списках будут отображаться только те значения, для которых данные доступны в базе данных), и это также следует за последующими выборами.

Кроме того, я видел примеры зависимых раскрывающихся, но все примеры, которые я вижу несколько раскрывающихся меню, но каждый из этих раскрывающихся получить значения из различных доменов классов

Возможно ли это сделать это только с одним классом домена?

Это как мой index.gsp выглядит следующим образом:

<html> 
<head> 
<g:javascript src="jquery-1.10.2.js"/> 
<g:javascript src="prototype.js"/> 
</head> 
<body> 
<form> 
<g:select from="['DESKTOP/LAPTOP','SMARTPHONES','OTHERS','TABLETS']" name="device" id ="device" 
      onchange="${remoteFunction(
      controller:'Pgtyp', 
      action:'ajaxGetMv', 
      // params:'\'mv=\' + escape(this.value)', 
      params:'\'device=\'+this.value+\'&mv=\'+$(\'mv\').value+\'&browser=\'+$(\'browser\').value+\'&pagetype=\'+$(\'pagetype\').value+\'&platform=\'+$(\'platform\').value' , 
      onSuccess: 'printpgtyp(data)')}" 
></g:select> 
<g:select from="['CORESITE','MWEB']" name="platform" id ="platform" 
      onchange="${remoteFunction(
      controller:'Pgtyp', 
      action:'ajaxGetMv', 
      // params:'\'mv=\' + escape(this.value)', 
      params:'\'platform=\'+this.value+\'&mv=\'+$(\'mv\').value+\'&browser=\'+$(\'browser\').value+\'&pagetype=\'+$(\'pagetype\').value' , 
      onSuccess: 'printpgtyp(data)')}" 
></g:select> 
<g:select from="['CHECKOUT','HOMEPAGE','OTHERS', 'DEPARTMENT', 'PRODUCT','SEARCH', '(All)','SHELF']" name="pagetype" id ="pagetype" 
      onchange="${remoteFunction(
      controller:'Pgtyp', 
      action:'ajaxGetMv', 
      // params:'\'mv=\' + escape(this.value)', 
      params:'\'pagetype=\'+this.value+\'&mv=\'+$(\'mv\').value+\'&browser=\'+$(\'browser\').value+\'&platform=\'+$(\'platform\').value' , 
      onSuccess: 'printpgtyp(data)')}" 
></g:select> 
<g:select from="['INTERNET EXPLORER','GOGGLE CHROME','SAFARI', 'MOZILLA', 'OTHERS']" name="browser" id ="browser" 
      onchange="${remoteFunction(
      controller:'Pgtyp', 
      action:'ajaxGetMv', 
      // params:'\'mv=\' + escape(this.value)', 
      params:'\'browser=\'+this.value+\'&mv=\'+$(\'mv\').value+\'&pagetype=\'+$(\'pagetype\').value+\'&platform=\'+$(\'platform\').value' , 
      onSuccess: 'printpgtyp(data)')}" 

></g:select> 
<g:select from="['AFFILIATES', 'CSE','DISPLAYADS','EMAIL','MOBILEWEB','OTHERS','ORGANIC','SEO', 'SEM']" name="mv" id = "mv" 
      onchange="${remoteFunction(
      controller:'Pgtyp', 
      action:'ajaxGetMv', 
      // params:'\'mv=\' + escape(this.value)', 
      params:'\'mv=\'+this.value+\'&browser=\'+$(\'browser\').value+\'&pagetype=\'+$(\'pagetype\').value+\'&platform=\'+$(\'platform\').value' , 
      onSuccess: 'printpgtyp(data)')}" 
></g:select> 
</form> 
<script> 
function printpgtyp(data) 
{ 

console.log(data) 
} 
</script> 
</body> 
</html> 
+0

Вы взглянули на ajaxdependancyselection: https://github.com/vahidhedayati/ajaxdependanceselection внизу проверьте последний пример --- страницу поиска для MyDepartments141. Если вы не хотите использовать плагин, проверьте https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/views/autoComplete/_selectJs.gsp, который имеет функцию javascript, которая вызывает несколько доменов при первоначальном обновление стоимости – Vahid

ответ

0

Для того, чтобы ответить на ваш вопрос, что вам нужно будет сделать, это произвести 1 г: выберите элемент с OnChange, который вызывает локальный скрипт Java, а не remoteFunction, поскольку, как вы уже догадались, remoteFunction сам по себе будет просто обновлять один Div, вы могли бы попробовать использовать полуколоны и передать несколько удаленных функций одному из них, а не тому, что я когда-либо пробовал.

Так, чтобы ответить на ваш вопрос, пожалуйста, обратитесь к:

I want my selects dropdowns to auto populate with Ajax in Grails website

Так как это, вероятно, имеет самый разумный ответ

ваш GSP ...

<g:select from="['DESKTOP/LAPTOP','SMARTPHONES','OTHERS','TABLETS']" name="device" id ="device" onchange="myMultiUpdater(this.value);"></g:select> 


<div id="selectbox1"> 
</div> 
<div id="selectbox2"> 
</div> 
<div id="selectbox3"> 
</div> 

<g:javascript> 
function myMultiUpdater(id) { 
$.get('${createLink(controller:"Controller1", action: "action1")}?id='+id+'',function(e){ 
    $('#selectbox1').hide().html(e).fadeIn('slow'); 
    } 
$.get('${createLink(controller:"Controller2", action: "action1")}?id='+id+'',function(e){ 
     $('#selectbox2').hide().html(e).fadeIn('slow'); 
     } 
    } 
    $.get('${createLink(controller:"Controller3", action: "action1")}?id='+id+'',function(e){ 
     $('#selectbox3').hide().html(e).fadeIn('slow'); 
     } 
} 
<g:javascript> 

Ваш контроллер

controller1 { 

def action1() { 
      def s=params.id 
      String domclass1= (s.substring(0,1).toUpperCase()) 
      String domclass2=s.substring(1,s.length()) 
      String domclass=domclass1+domclass2.toLowerCase() 
      Class domainClass = grailsApplication?.domainClasses.find { it.clazz.simpleName ==domclass+'Cities' }?.clazz 
      def cities=loadCities(domainClass) 
      render(template: 'cities', model: [cities: cities]) 
     } 

} 

Вы просто расширяли объекты или вместо использования get getSON и передавали бы определенные значения обратно - см. Приведенный выше комментарий на selectJs.gsp из плагина. Внутри этих блоков выбора вы также можете загрузить окно выбора по умолчанию или оставить их, поскольку они ничего не показывают до тех пор, пока не будет сделан выбор. Этот метод загружает в целом содержание - плагин фокусируется на извлечение элементов и показывая соответствующие определенные элементы данной таблицы/domainClass

и жгутов в г: JavaScript тегов вы можете играть с

<g:remoteFunction controller="controller3" action="action1" onComplete="'selectbox3'" params= "\'id=\'+ id"/> 

Вместо из

$.get('${createLink(controller:"Controller3", action: "action1")}?id='+id+'',function(e){ 
      $('#selectbox3').hide().html(e).fadeIn('slow'); 
      } 

Так как они будут делать то же самое в верхней выглядит опрятнее и более GSP заглянув в JavaScript. Твой выбор.

Смежные вопросы