如何将查询回调数据调用到数据属性select2

时间:2016-04-01 07:00:43

标签: javascript jquery select2

$('#placeSelect').select2({
    width: '100%',
    allowClear: true,
    multiple: true,
    maximumSelectionSize: 1,
    placeholder: "Click here and start typing to search.",
     data: function(query) {
     queryData{!randomJsIden}(query);
     },
     matcher: function (term, text) {if (text.toUpperCase().indexOf(term.toUpperCase()) == 0){return true;}return false;}
     });


        function queryData{!randomJsIden}(query){
           Visualforce.remoting.Manager.invokeAction(
       '{!$RemoteAction.AutoCompleteV2_Con.getData}','{!sObjVal}','{!labelFieldVar}','{!valueFieldVar}',query.term,
                     function(result, event){
                      //if success
                         if(event.status){ 
                            var data = {results:[{ id: 1, text: "Ford"     },
            { id: 2, text: "Dodge"    },
            { id: 3, text: "Mercedes" },
            { id: 4, text: "Jaguar"   }]}
                             query.callback( data);                           
                         }   
                     }, 
                      {escape: true}
                );
            } 
    </script>

如何在select2中将查询回调数据初始化为data属性。 我无法直接使用数据。在上面的示例中,我使用的是样本数据。

query : function(query){
     queryData{!randomJsIden}(query);
     }

我想用这样的数据属性替换它:下面的一个不起作用

data : function(query){
     queryData{!randomJsIden}(query);
     }

这是小提琴:

http://jsfiddle.net/Lnf8j/303/

让我知道你的任何想法

1 个答案:

答案 0 :(得分:1)

您的代码中存在几个问题

  1. 您不能使用花括号命名函数,因为它是javascript function queryData{!randomJsIden}(query)中的保留符号符号,而是将其命名为function queryData(query){ ... }
  2. 如果您为select2的数据添加回调,则需要返回从queryData()函数构造的数据。

    data: function(query) {
      return queryData(query);
    },
    function queryData(query){
       ...
       return data;
    }
    
  3. 如果我没有错,数据会通过select2内的异步调用来源queryData(),这意味着数据会在不可预测的时间返回,因此您需要限制用户访问select2组件,直到数据被提供给它。 这意味着您需要预取数据或禁用select2字段,直到从远程调用返回数据。

  4. Working Demo @ JSFiddle