http://ivaynberg.github.com/select2/#infinite与えられた例はあまり説明されておらず、それらの結果を生成するためにバックエンドで何が起こっているのかわかりません。
編集: クエリから限られた量の行を返すように cfc を変更しました。のajaxから呼び出されることを期待して、合計行数も追加しましたdata.total
。
CFC:
<cffunction name="GetClientsByName"
access="remote"
returntype="string"
output="true"
hint="get clients from search term">
<cfargument name="name" type="string" required="yes">
<cfargument name="page" type="numeric">
<cfargument name="page_limit" type="numeric">
<cfset var start = (arguments.page * arguments.page_limit) - arguments.page_limit + 1>
<cfset var end = start + arguments.page_limit>
<cfset var util = createObject("component", "/surveymanagement/JSONUtil")>
<cfset var results = arrayNew(1)>
<cfset var elem = "">
<cfset var total = "">
<cfquery name="GetClientsByName" datasource="#application.dsn#">
SELECT client_id, client_name
FROM Clients
WHERE client_name LIKE <cfqueryparam cfsqltype="cf_sql_varchar" value="%#arguments.name#%">
ORDER BY client_name
</cfquery>
<cfset total = structNew()>
<cfset total["total"] = GetClientsByName.RecordCount>
<cfloop query="GetClientsByName" startrow="#start#" endrow="#end#">
<cfset elem = structNew()>
<cfset elem["id"] = GetClientsByName.client_id>
<cfset elem["text"] = GetClientsByName.client_name>
<cfset arrayAppend(results, elem)>
</cfloop>
<cfset arrayAppend(results, total)>
<cfcontent type="application/json" reset="true"><cfoutput>#util.serializeJSON(results)#</cfoutput><cfabort />
</cffunction>
cfarguments page と page_limit を使用して SQL を変更する必要があると思いますが、どうすればよいかわかりません。ページごとに返される行を制限してから、次のページの行を追加するにはどうすればよいですか?
js:
$(".select").select2({
allowClear: true,
blurOnChange: true,
openOnEnter: false,
ajax: {
url: "/surveymanagement/admin/client.cfc",
dataType: 'json',
quietMillis: 100,
data: function (term, page) {
return {
method: "GetClientsByName",
name: term,
page_limit: 10,
page: page
};
},
results: function (data, page) {
var more = (page * 10) < data.total;
return { results: data, more: more };
}
}
});
また、誰かが select2 に無限スクロールを組み込む方法についてのチュートリアルを見つけてくれるとうれしいです。
私の問題はresults
ajax呼び出しのセクションにあると思いますが、よくわかりません。