2016-12-28 116 views
1

这是我第一次尝试select2,我正在触及一个可能是基本问题的问题。选择2问题填充选择

选择控制代码:

<select class="form-control" id="trade-select" name="trade-select"> 
    <option>...</option> 
</select> 

我用下面的代码通过一个ColdFusion函数来获取数据:从调用返回到AJAX URL

var options = 
    { 
     theme: 'bootstrap', 
     ajax: 
     {  
      url: "/ajax/search-trades.cfm", 
      dataType: 'json', 
      data: function (params) { return { query: params.term, 'groups_only': true }; }, 

      processResults: function (data, page) 
      { // parse the results into the format expected by Select2. 
       alert(data.DATA); // see note further below 
       return {results: data.DATA, more: false}; 
      } 

     } 
    }; 

    $('#trade-select').css('width', '100%').select2(options) 
     .on('change', function(event) 
     { 
      if (this.value == '') return; 
      $('#trade-select').val('').trigger('change'); 
     }); 

原始JSON数据如下:

{"COLUMNS":["TRADE_CATEGORY"],"DATA":[["Appliance Repairs"],["Furniture Repair"],["Painting &amp; Decorating"]]} 

上述代码中的警报返回以下内容,essentinti结盟没有括号或任何一个逗号分隔的列表:

电器售后维修,家具修理,喷漆&装饰

的问题是,选择不与返回的数据填充。我猜这是与返回数据的格式有关的东西。

不知道我是否提供了足够的信息,所以让我知道你是否需要其他东西。

对于任何可能有想法的ColdFusion开发人员,以下是通过ajax url调用的ColdFusion模板。我知道我可以直接拨打电话到CFC,而不需要中间模板:

<cfsilent> 
<cfparam name="url.groups_only" default="true"> 
<cfparam name="url.query" default=""> 

<cfset oSystem = createObject("component","cfcs.system")> 
<cfset qTradeCategories = oSystem.getTradeCategories(
    groups_only=url.groups_only, 
    query=url.query)> 
</cfsilent> 
<cfoutput>#SerializeJSON(qTradeCategories)#</cfoutput> 
+0

(编辑)望着例子,选择2预计该数据将在比你的CFM脚本返回不同的。 [这个例子](https://select2.github.io/examples.html)表明它需要一个类似''{id:0,text:'enhancement'}]''的结构数组。这不是你的CF脚本返回的。或者修改脚本以返回适当的结构,或者循环访问processResults()中的'data'对象并构建select2期望的结构。 – Leigh

+0

@Leigh,这正是我在答案中的例子:) – Dekel

+0

好的,我会试一试,然后回来。我相信你是对的。 – user460114

回答

4

results的结构应该是对象的列表,每个对象必须有idtext键:

[ 
    { 
    'id': 4, 
    'text': 'some text' 
    }, 
    { 
    'id': 3, 
    'text': 'some other text' 
    } 
] 

因为你的数据不是在结构 - 可以确保您发送正确的结构,或者在JavaScript中产生的:

results: data.DATA.reduce(function(a, b) { 
     a.push({'id': b[0], 'text': b[0]}) 
     return a; 
}, []) 

data = [["Appliance Repairs"],["Furniture Repair"],["Painting &amp; Decorating"]] 
 

 
console.log(data.reduce(function(a, b) { 
 
    a.push({'id': b[0], 'text': b[0]}) 
 
    return a; 
 
}, []))

+0

答案如果我用原始JSON返回ID如下:“DATA”:[[1,“家电维修”],[26,“家具修理”],[43,“绘画&装饰”] ]? – user460114

+0

你可以把它改成'a.push({'id':b [0],'text':b [1]})' – Dekel

+0

你是男人! – user460114