0

我的应用程序中有 2 个选择框,它们是从 db 填充的,当我从第一个选择框选择一个值时,第二个选择框是通过 ajax 填充的。这个场景效果很好。但由于选择框中的值是静态的,我不想从 db 中填充它们,我认为使用这个文件更有用,并且有利于应用程序性能。那么我如何从文件(json、xml 等)中填充它们?第一个选择框到第二个是一对多

4

1 回答 1

1

这听起来像是很多工作,因为您将不得不从 db.xml 填充文本文件。事实上,它的最终结果实际上与缓存解决方案没有什么不同。http://mrdustmite.blogspot.co.uk/2010/09/simple-ehcache-in-grails.html?m=1

上面提到的插件从 JSON 值生成主要/次要值..

https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/services/ajaxdependancyselection/AutoCompleteService.groovy

def selectSecondary(params) {   
  if (params.domain2) {
    def domainClass = grailsApplication?.getDomainClass(params?.domain2)?.clazz
    def query = {
      eq params.bindid, params.id.toLong()
      projections {
        property(params.collectField)
        property(params.searchField)
      }
      order(params.searchField)
    }
    def results =domainClass.createCriteria().list(query)
    def primarySelectList = []
    results.each {
      def primaryMap = [:]
      primaryMap.put('id', it[0])
      primaryMap.put('name', it[1])
      primarySelectList.add(primaryMap)
    }
    return primarySelectList as JSON
  }
}

https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/taglib/ajaxdependancyselection/AutoCompleteTagLib.groovy

def gsattrs=['optionKey' : "${attrs.collectField}" , 'optionValue': "${attrs.searchField}", 'id': "${attrs.id}", 'value': "${attrs.value}", 'name': "${name}"]
gsattrs['from'] = primarylist
gsattrs['noSelection'] =attrs.noSelection
gsattrs['onchange'] = "${remoteFunction(controller:''+attrs.controller+'', action:''+attrs.action+'', params:'\'id=\' + escape(this.value) +\'&setId='+attrs.setId+'&bindid='+ attrs.bindid+'&collectField='+attrs.collectField2+'&searchField='+attrs.searchField2+'&domain2='+attrs.domain2+'&controller='+attrs.controller+'\'',onSuccess:''+attrs.id+'Update(data)')}"
def link = ['action': attrs.action , 'controller': attrs.controller ]
out<< g.select(gsattrs)

如果您希望沿着这条路线走下去,您应该能够使用该功能从文本文件中重现相同的效果......

于 2013-09-28T21:17:53.787 回答