タイトルのとおり、HTML5 ページで最新の select2 選択ボックスを使用しており、その例を使用して、作成した Web API 2 エンドポイントを呼び出しています。
テスト目的で、エンドポイントは単純にタグのコレクションを構築し、結果を HttpResponseMessage として返します。すべてを視覚化するためのコードを次に示します。
タグ エンティティ
public class TagData
{
public string Id { get; set; }
public string Text { get; set; }
}
モデル:
public class TagsModel
{
public IEnumerable<TagData> Tags { get; set; }
}
Web API 2 プロジェクトのコントローラー アクション:
public IHttpActionResult Get()
{
var tags = new TagsModel()
{
Tags = new List<TagData>
{
new TagData()
{
Id = "1",
Text = "Tag1"
},
new TagData()
{
Id = "2",
Text = "Tag2"
}
}
};
return Ok(tags);
}
単体テストをノックアップしましたが、composer を使用して Fiddler4 でテストを実行してもすべて機能し、次の JSON 応答が返されます。
{"Tags":[{"Id":"1","Text":"Tag1"},{"Id":"2","Text":"Tag2"},{"Id":"3","Text":"Tag3"}}]}
HTML5 ページで、標準の select2 html 要素にドロップしました。
<select class='s2-search-box form-control' multiple='multiple'></select>
ここでのアイデアは、select2 コントロールをリモート データにバインドし、タグ付け機能を使用して、ユーザーがタグを見つけて選択し、繰り返すことができるようにすることです。これは、次の ajax 呼び出しを使用して行われます。
$(document).ready(function () {
$(".s2-search-box").select2({
ajax: {
url: "http://localhost:54850/api/s2demo",
dataType: 'json',
delay: 250,
data: function (params) {
return {
q: params.term, // search term
page: params.page
};
},
processResults: function (data, page) {
// parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to
// alter the remote JSON data
return {
results: data.Tags
};
},
cache: true
}
});
});
これまでのところ、単体テストはうまく機能しており、Firebug を使用して ajax 呼び出しを検査すると、データが正しい形式で返されていることがわかり、data.Tags コレクションを表示できるので、データがそこにあることがわかりますが、実際のselect2 ドロップダウンは「未定義」項目のリストを表示し、実際には必要なデータを表示せず、それらの選択からタグを作成することもできません。
補足として、私もこれを試しました:
$(".s2-search-box").select2({
ajax: {
url: "http://localhost:54850/api/s2demo",
dataType: "json",
type: "GET",
data: function (params) {
var queryParameters = {
term: params.term
}
return queryParameters;
},
processResults: function (data) {
return {
results: $.map(data, function (item) {
return {
text: item.Text,
id: item.Id
}
}),
pagination: {
more: data.more
}
};
}
}
});
これは、select2 コントロールに次のように表示されるようにタグを作成できるという点で機能します。
タグ1[x] タグ2[x]
ただし、ドロップダウン リストは永続的に表示されます。
select2 ライブラリの最新の 4.0.2 バージョンを使用しています。
前もって感謝します。
T