Select2プラグイン(v 3.5.2)をAjaxで使用して、リストの要素を動的にロードします。
Select2の初期化(ajaxヘルパーでurlプロパティが設定されている)とajax呼び出しが行われる時間の間に問題があるため、このurlを変更する必要がある場合があります。
だから私はこのようなものを持っています:
$box.select2({
containerCssClass: "form-control"
minimumInputLength: 0,
allowClear: true,
ajax: {
url: someUrl,
dataType: 'json',
quietMillis: 100,
...
}
いつ、どこでajax.url
値を変更してから起動するのかわかりません。
Select2の助けは言う:
Select2は、jQueryの
$.ajax
関数を使用して、デフォルトでリモート呼び出しを実行します。代替のtransport
関数をajax
設定で指定するか、ajaxヘルパーを使用する代わりにカスタムquery
関数を提供することにより、完全にカスタムの実装を構築できます。
しかし、私はそれを行う方法の例を見つけることができません。
助けてくれてありがとう。とても有難い。
いつ、どこで、どのようにajax.url値を起動する前に変更するのかわかりません。
ajax.url
オプションは、静的文字列、またはSelect2 3.5.xと4.0.0の両方で1を返すメソッドとして指定できます。
$("select").select2({
ajax: {
url: function () {
return UrlHelper.RemoteAPI();
}
}
});
これはbase URLを変更する場合に便利です。たとえば、URLが実行時に決定されるか、別のメソッドで自動的に生成される場合などです。 クエリパラメータを変更する必要がある場合(検索用語の送信に使用されるものなど)は、ajax.data
オプションをオーバーライドする必要があります。
$("select").select2({
ajax: {
data: function (args) {
// args is the search term in 3.5.x
// args is an object containing the query parameters in 4.0.0
// args.term is the search term in 4.0.0
return {
search: args.term || args;
};
}
}
});
ここのデータはデフォルトでクエリパラメータとして追加され、メソッドタイプがGET
(デフォルト)から他のタイプに変更された場合にリクエストの本文として送信されます。
Select2は、jQueryの$ .ajax関数を使用して、デフォルトでリモート呼び出しを実行します。代替トランスポート関数をajax設定で指定できます。または、ajaxヘルパーを使用する代わりにカスタムクエリ関数を提供することにより、完全にカスタムの実装を構築できます。
しかし、私はそれを行う方法の例を見つけることができません。
Select2では、ajax.transport
オプションを変更することで、別のAJAXトランスポートを使用できます。
3.5.2では、これは$.ajax
互換メソッドである必要があるため、success
およびfailure
コールバックを含むオブジェクトを取得できる必要があります。
$("select").select2({
ajax: {
transport: function (args) {
// args.success is a callback
// args.failure is a callback
// should return an object which has an `abort` method.
return $.ajax(args);
}
}
});
4.0.0では、これはparams
オブジェクト(ajax.data
に渡されるものと同じもの)、success
コールバック、およびfailure
を受け取るメソッドである必要があります折り返し電話。
$("select").select2({
ajax: {
transport: function (params, success, failure) {
var $request = $.ajax(params);
$request.then(success);
$request.fail(failure);
return $request;
}
}
});
同じことを処理する非常に単純なJavascriptコードは、Suitescript(Netsuite)でも使用できます。
// prepare your dynamic URL inside this method and return
function getURL() {
return url + params;
}
// While binding the select2 with the dropdown set url to call a anonymous function which internally calls another function.
jQuery("select.itemDropDown").select2({
placeholder: "Select an item",
width: "200px",
minimumInputLength: 3,
ajax: {
url: function() {
return getURL()
},
dataType: 'json'
}
});