このトピックは、古いコンボから新しいコンボへの移行を支援することを目的としています。以前に行っていたシナリオと現在行うことのできるシナリオを示します。
このトピックは、以下のセクションで構成されます。
オプション | 以前 | 現在 |
---|---|---|
width | $('#combo').igCombo({ width: 300 }) | デフォルトの幅は css により設定されます。新しいコンボ幅を設定する推奨方法は、<style>.ui-igcombo-wrapper { width: 300px } </style> です。古い方法もサポートされます。 |
height | $('#combo').igCombo({ height: 300 }) | デフォルトの高さは css により設定されます。新しいコンボの高さを設定する推奨方法は、<style>.ui-igcombo-wrapper { height: 300px } </style> です。古い方法もサポートされます。 |
enableDisplayBlock | $('#combo').igCombo({ enableDisplayBlock: true}) | このオプションは削除されました。現在、これは css により制御できます: <style>.ui-igcombo-wrapper { display: block }</style> |
mode | 以前にサポートされていた値: editable, dropdown, readonlylist, readonly, 0, 1, 2, 3 。 |
現在サポートされる値: editable, dropdown, readonlylist, readonly 。ドロップダウン モードは、現在、html の要素選択動作に非常に似ています。選択が単一である場合、常に選択された項目が存在し、クリア ボタンはデフォルトで無効になります。 |
renderMatchItems | - | このオプションの名前は、その動作そのものを表すために、highlightMatchesMode に変更されました。 |
filteringType | filteringType のデフォルトは 'none' |
現在、filteringType のデフォルトは'local' であるため、デフォルトでローカル フィルタリングが有効にされます。コンボの初期化時にフィルタリングを無効にするには $('#combo').igCombo({ filteringType: 'none' }) 、またはコンボがすでに作成されている場合には $('#combo').igCombo('option', 'filteringType', 'none' }) を使用します。 |
selectedItems | 最初に選択される項目の指定、およびコンボが作成された後に選択された項目の設定または取得のために使用されていました。 | このオプションは削除されました。最初に選択される項目は、新しいオプション initialSelectedItems を使用して設定できます。設定の選択は、コンボ API メソッド value、 select または index により行われます。選択された項目の取得は、API メソッド selectedItems により行うことができます。 |
multiSelection | 以前にサポートされていた値: null、false、0、off、true、1、on、2、onWithCheckboxes' |
現在、このオプションはすべての複数選択設定をセットアップするために使用されます。以下の設定を持つオブジェクトを提供できます: enabled、addWithKeyModifier、showCheckboxes、itemSeparator 。複数選択を有効にするには、enabled を true に設定します。すでに選択された項目に項目を追加する場合に、ctrl キーを押し続けるようにするには、addWithKeyModifier を true に設定します。デフォルトでは、すべての選択は ctrl キーを押さなずに追加できます。各リスト項目の前にチェックボックスを描画するには、showCheckboxes を true に設定します。選択された項目の間に描画する文字を変更するには、itemSeparator を設定します。デフォルトの文字は「,」です。すべてを設定した例: $('#combo').igCombo({ multiSelection: { enabled: true, addWithKeyModifier: true, showCheckboxes: true, itemSeparator: ', ' } }) |
itemSeparator | 選択された項目の間に描画する文字を変更するために使用されていました。 | このオプションは削除され、multiSelection オプションの設定として追加されました。 |
enableActiveItem | キーボードによるナビゲーション時にアクティブな項目を有効または無効にするために使用されていました。 | このオプションは削除されました。選択が単一である場合、アクティブ項目は削除され、キーボードによるナビゲーションで選択を変更します。アクティブ項目は、複数選択が有効な場合は常に有効です。 |
dropDownMaxHeight dropDownMinHeight | ドロップダウン リストの最大と最初の高さを設定するために使用されていました。 | これらのオプションは削除されました。新しいオプション visibleItemsCount がドロップダウンの高さを制御するために追加されています。 |
dropDownAsChild | コンボ要素の子としてドロップダウン リストを描画するために使用されていました。 | dropDownAttachedToBody に名前変更されました。デフォルト値は true です。ドロップダウンを子として描画するには false に設定します: $('#combo').igCombo({ dropDownAttachedToBody: false }) |
showDropDownButton | ドロップダウン ボタンの表示状態を制御するために使用されていました。 | このオプションは削除されました。ドロップダウン ボタンの表示状態は、css により制御できます。ドロップダウン ボタンを無効にするには: <style>#combo .ui-igcombo-button { display: none; }</style> |
nullText | テキスト入力が空の場合に表示するテキストを指定するために使用されていました。 | placeHolder に名前変更されました。既知の問題ですが、このオプションは IE8/9 では機能しません。 |
closeDropDownOnSelect | 選択されたときにドロップダウンを閉じるかどうかを指定するために使用されていました。 | マウス クリックで、またはエンター キーを押して、リストで単一項目が選択された場合に、ドロップダウン リストを閉じるかどうかを指定するように変更されました。デフォルトは、単一選択に対しては false 、複数選択に対しては true です。このオプションは、複数選択が有効で、追加選択が実行された場合、ドロップダウンを閉じません。$('#combo').igCombo({ closeDropDownOnSelect: false }) |
allowCustomValue | コンボのテキスト入力でカスタム値を許可するために使用されていました。 | このオプションは初めはサポートされませんでしたが、15.1 の 9 月サービス リリースおよび 15.2 のボリューム リリースでご利用いただけます。 |
dataBindOnOpen | ドロップダウンが開かれる際にデータ バインディングを延期するために使用されていました。 | このオプションはサポートされていません。同じ機能性は、ドロップダウン リストが最初に開かれる際に、データ バインディング イベントとデータ バインドをキャンセルすることにより実現できます。 |
text | 初期化時にコンボ入力にカスタム テキストを設定するために使用されていました。 | このオプションはサポートされていません。初期選択を設定するには、オプション initialSelectedItems を使用します。 |
clearSelectionOnBlur | テキスト入力が選択された項目テキストと一致しなかった場合に、選択された項目をぼかして保持するために使用されていました。主に allowCustomValues オプションとともに使用されていました。 |
このオプションはサポートされていません。 |
valueKeyType textKeyType | value / text データの背後のデータ型を指定するために使用されていました。 | これらのオプションはサポートされていません。データ ソースからの value フィールドと text フィールドの型が使用されます。 |
parentCombo cascadingDataSources parentComboKey | カスケード機能をセットアップするために使用されていました。 | これらのオプションはサポートされていません。内部カスケード機能はサポートされなくなりました。これは、現在のコンボの選択変更イベントで関係するコンボ データ ソースを変更することで実現できます。サンプル参照 |
メソッド | 以前 | 現在 |
---|---|---|
dropDownVisible | ドロップダウン リストの表示状態を制御するために使用されていました。 | この API メソッドは削除されました。ドロップダウン リストを開くには openDropDown、ドロップダウン リストを閉じるには closeDropDown を使用してください。 |
setFocus | コンボ テキスト入力にフォーカスを設定するために使用されていました。 | この API メソッドは削除されました。テキスト入力にフォーカスを設定するには、入力で jQuery focus メソッドを呼び出します: $("#combo").igCombo("textInput").focus() |
hasFocus | コンボ テキスト入力にフォーカスがあるかどうかをチェックするために使用されていました。 | この API メソッドは削除されました。テキスト入力にフォーカスがあるかどうかチェックするには、jQuery is(":focus") を使用します: $("#combo").igCombo("textInput").is(':focus'). |
isSelected | 指定されたインデックスのリスト項目が選択されているかどうかをチェックするために使用されていました。 | 項目の選択をチェックする API メソッドは 3 つあります。jQuery 参照によるisSelected、インデックスによる isIndexSelected、値による isValueSelected です。 |
selectedIndex | 最初に選択された項目のインデックスを取得するため、またはインデックスによる選択を設定するために使用されていました。 | この API メソッドは index に名前変更されました。このメソッドは、インデックスの配列も受け入れ、一度に複数の項目を選択できます。複数の項目が選択された場合、選択されたすべてのインデックスを持つ配列を返します。その他の機能は同じです。 |
value | 最初に選択された項目の値を取得するため、または値による選択を設定するために使用されていました。 | このメソッドは値の配列も受け入れ、一度に複数の項目を選択できます。複数の項目が選択された場合、このメソッドは選択されたすべての値を持つ配列を返します。その他の機能は同じです。 |
values | 選択されたすべての項目の値を取得するため、または値による選択を設定するために使用されていました。 | この API メソッドは削除されました。この機能は value メソッドに統合されました。 |
itemByIndex | 特定のインデックスのリスト項目に関係するメンバーを持つオブジェクトを取得するために使用されていました。{ element, index, value, text } のオブジェクトを返すために使用されていました。 |
この API メソッドは itemFromIndex に名前変更されました。返されるオブジェクトは item です。 |
itemByValue | 特定の値のリスト項目に関係するメンバーを持つオブジェクトを取得するために使用されていました。{ element, index, value, text } のオブジェクトを返すために使用されていました。 |
この API メソッドは itemFromValue に名前変更されました。返されるオブジェクトは item です。 |
getDataSource | コンボにより使用されるデータ ソースへの参照を取得するために使用されていました。 | この API メソッドは削除されました。データ ソースへの参照は、$("#combo").igCombo("option", "dataSource") により取得できます。 |
getData | コンボにより使用される現在のデータへの参照を取得するために使用されていました。 | この API メソッドは削除されました。現在のデータへの参照は、 $("#combo").igCombo("option", "dataSource").dataView() により取得できます。 |
getRecordsCount | dataSource、dataView、または全サーバー データのレコード数を取得するために使用されていました。 | この API メソッドは削除されました。dataSource のレコード数を取得するには: $("#combo").igCombo("option", "dataSource").data().length 。dataView のレコード数を取得するには: $("#combo").igCombo("option", "dataSource").dataView().length 。全サーバー データのレコード数を取得するには: $('#combo').igCombo('option', 'dataSource').totalRecordsCount() 。 |
filter | event, filterText, noFilter のメソッド パラメーターが使用されていました。 |
メソッド パラメーターは filterText, event に変更されました。 |
remove | 他の機能は残しながら、親要素からコンボを削除するために使用されていました。 | この API メソッドはサポートされていません。 |
getFooter | コンボ フッターへの参照を取得するために使用されていました。 | 現在フッターがないため、この API メソッドはサポートされていません。 |
メソッド | 説明 |
---|---|
openDropDown | ドロップダウン リストを開くには、このメソッドを使用します。 |
closeDropDown | ドロップダウン リストを閉じるには、このメソッドを使用します。 |
select | 項目の jQuery 参照に渡すことにより、1 つまたは複数のリスト項目を選択するために使用します。$('#combo').igCombo('select', $('.itemSelector')) |
value | 値により、1 つまたは複数のリスト項目を選択するために使用します。単一項目を選択するには $('#combo').igCombo('value', 'itemValue') 、一度に複数項目を選択するには $('#combo').igCombo('value', ['itemValue_1', 'itemValue_2', 'itemValue_3']) 。パラメーターを指定せずにこのメソッドを呼び出すと、選択された値が返されます。 |
index | データ ソースのインデックスにより、1 つまたは複数のリスト項目を選択するために使用します。単一項目を選択するには $('#combo').igCombo('index', 5) 、複数の項目を選択するには $('#combo').igCombo('index', [3, 5, 8, 10]) 。パラメーターを指定せずにこのメソッドを呼び出すと、選択されたインデックスが返されます。 |
isSelected | 特定の jQuery 要素が選択されているかどうかをチェックするために使用します。$('#combo').igCombo('isSelected', $('.selector')) |
isIndexSelected | 特定のインデックスの項目が選択されているかどうかをチェックするために使用します。$('#combo').igCombo('isIndexSelected', 5) |
isValueSelected | 特定の値を持つ項目が選択されているかどうかをチェックするために使用します。$('#combo').igCombo('isValueSelected', 'itemValue') |
dataForValue | valueKey プロパティと一致する値により、リスト項目の関連付けられたデータ ソース データを取得します。$('#combo').igCombo('dataForValue', 'itemValue') |
dataForElement | jQuery 参照により、リスト項目の関連付けられたデータ ソース データを取得します。$('#combo').igCombo('dataForElement', $('.listItemSelector')) |
itemsFromElement | jQuery 要素により、コンボのリスト項目要素を表す項目を取得します。メソッドに複数の要素が与えられた場合、項目を持つ配列が返されます。$('#combo').igCombo('itemsFromElement', $('.listItemSelector')) |
itemsFromValue | 値により、コンボのリスト項目要素を表す項目を取得します。メソッドに値の配列が与えられた場合、項目を持つ配列が返されます。$('#combo').igCombo('itemsFromValue', 'itemValue') |
itemsFromIndex | インデックスより、コンボのリスト項目要素を表す項目を取得します。メソッドにインデックスの配列が与えられた場合、項目を持つ配列が返されます。$('#combo').igCombo('itemsFromIndex', 3) |
items | コンボのすべての項目を持つ配列を取得します。 |
filteredItems | コンボでフィルター処理されたすべての項目を持つ配列を取得します。 |
selectedItems | 選択された項目を取得します。複数の項目が選択されている場合、選択された項目を持つ配列が返されます。 |
listItems | コンボ ドロップダウン リストで描画されたすべてのリスト項目に対する jQuery 参照を取得します。 |
clearFiltering | フィルタリングをクリアします。 |
clearInput | テキスト入力値を消去し、すべての選択、フィルタリング、強調表示を削除します。 |
selectAll | すべてのリスト項目を選択します。 |
deselect | jQuery 参照によりリスト項目を選択解除します。 |
deselectByValue | 特定の値のリスト項目を選択解除します。 |
deselectByIndex | 特定のインデックスのリスト項目を選択解除します。 |
deselectAll | 選択されたすべてのリスト項目を選択解除します。 |
comboWrapper | コンボのアウター要素に対する jQuery 参照を取得します。 |
dropDown | コンボのドロップダウン リストに対する jQuery 参照を取得します。 |
textInput | コンボのテキスト入力に対する jQuery 参照を取得します。 |
valueInput | コンボの値入力に対する jQuery 参照を取得します。 |
dropDownOpened | ドロップダウンが開いているかどうかをチェックします。 |
イベント | 変更内容 |
---|---|
ui-igcombo-nulltext | このクラスは削除されました。たとえば、コンボの入力要素にテキスト色を適用するには、以下の実装を使用できます。 |
<style>
input#combo::-webkit-input-placeholder {
color: red;
}
</style>
注: ブラウザーに基づいて (
:-moz-placeholder
,:-ms-input-placeholder
); を使用します。
イベント | 変更点 |
---|---|
selectionChanging | イベント引数 ui.oldItems は ui.currentItems に名前変更され、選択変更がされずに、現在その項目の選択が継続していることをより明確に表すようになりました。項目は item 形式です。 |
selectionChanged | 項目は item 形式です。 |
dropDownOpening dropDownOpened dropDownClosing dropDownClosed | イベント引数 ui.element は ui.list に名前変更され、これがドロップダウン リストであることをより明確に表すようになりました。 |
textChanged | このイベントは削除されました。テキストの変更時点をチェックするには、コンボをテキスト入力キーダウン イベントにバインドします。 |
noMatchFound | autoComplete 機能はまだ完全にサポートされていないため、このイベントは削除されました。 |
activeItemChanging activeItemChanged | これらのイベントは削除されました。 |
イベント | 説明 |
---|---|
rendered | コンボのレンダリングが完了したときに発生するイベント。 |
itemsRendering | コンボ項目のレンダリングが実行される前に発生するイベント。 |
itemsRendered | コンボ項目のレンダリングが完了した後に発生するイベント。関数 callback は、描画されたリスト項目要素を表す項目の配列である引数 ui.items に渡されます。 |
コンボをリストからのみ値を受け入れるコントロールと考えることが、新しい igCombo
コントロールに導入された変更点の 1 つです。igCombo
にはカスタム値を許可するオプションはありません。以前は、Knockout 拡張機能での異なる作業プロセスのためにカスタム値が必要でした。すなわち、igCombo
が変更について View-Model に通知できるのは、項目が選択 / 選択解除されるとき、および選択された項目コレクションが変更されるときのみです。したがって、古い Knockout 拡張オプションの一部が必要なくなり、必要ないくつかのオプションが導入されました。igCombo
を Knockout 拡張機能と統合するために、以下の変更が行われました。
オプション | 説明 |
---|---|
selectedItems | igCombo で選択された項目の配列。View-Model でこのオプションが構成されている場合、コンボで選択された項目と View-Model との間のデータ交換があることを保証します。 |
selectedItemType | 配列での選択項目の型を "primitive" または "object" として構成できます。 |
オプション | 説明 |
---|---|
text | 入力の変更が発生した場合、コンボは View-Model を更新できません。 古い igCombo では、コンボ値を保持する View-Model プロパティがあり、更新されると他のサブスクライバーに通知されていました。igCombo の Knockout 拡張機能にはそのようなオプションは存在しなくなったため、selectionChanged イベント ハンドラーを使用して現在のコンボ値を取得し、サブスクライバーに通知できます。以下の表のコード スニペットで、古い機能をシミュレートする方法を示します。 |
value | 値により項目を選択する場合、新たに導入された selectedItems オプションが使用されるため、このオプションは必要なくなりました。 |
enableTextChangedUpdate | igCombo には textChanged イベントがないため、このような機能を持つことはできません。 |
enableSelectionChangedUpdate | 新しい変更では、更新は常にコンボの選択変更時に発生します。それがこのようなオプションが不要になった理由です。 |
cascadingDataSource | igCombo コントロールにはこのようなオプションはありません。それが Knockout 拡張機能でも使用できない理由です。 |
前
<script type="text/javascript">
var model = [
{ name: "Adam Sandler", id: "nm0001191" },
{ name: "Brooke Shields", id: "nm0000222" },
{ name: "Charles Chaplin", id: "nm0000122" },
];
var viewModel = new ViewModel(model);
function ViewModel(actorsList) {
this.selectedActor = ko.observable(actorsList[0].name);
}
</script>
<span id="comboActors" data-bind="igCombo: {
text: selectedActor,
textKey: 'name',
valueKey: 'id'
}"></span>
現在
<script type="text/javascript">
var model = [
{ name: "Adam Sandler", id: "nm0001191" },
{ name: "Brooke Shields", id: "nm0000222" },
{ name: "Charles Chaplin", id: "nm0000122" },
];
var viewModel = new ViewModel(model);
function ViewModel(actorsList) {
this.selectedActor = ko.observable(actorsList[0].name);
this.selectedActorNew = ko.observableArray([actorsList[0].id]);
this.selectionChanged = function(e, args) {
this.selectedActor(args.items[0].data.name);
}
}
</script>
<span id="comboActors" data-bind="igCombo: {
selectedItems: selectedActorNew,
textKey: 'name',
valueKey: 'id',
selectionChanged: selectionChanged
}"></span>
注: これは、
igCombo
から View-Model への変更がある場合のみ機能します。
新しいコンボおよびその Knockout 拡張子が更新されているため、アーキテクチャも変更されました。コンボの選択コレクションがドロップダウンの項目に利用可能な値のみを許可するためにデザインされました。Knockout 拡張子はそのパターンを使用し、コンボの変更をモニターする監視可能な項目は選択された項目の配列です。 以前のバージョンで拡張子がコンボ フィールドをモニターしました。新しい実装では、単一の選択だけでなく、複数の選択された項目をモニターできます。
この方法で、監視可能な入力要素が監視可能配列として定義できないため、igCombo を HTML 入力要素にバインドできません。一方、igEditors およびその拡張子が、HTML 入力要素と動作するようデザインされています。igCombo を HTML 入力要素と結合するには、以前のセクション (Knockout 結合の変更) に説明した実装を使用できます。 このセクションのコードはカスタム解決を紹介します。ViewModel および View のコードに変更せずに新しい igCombo および Knockout 拡張子を使用できます。このポリフィルは、Ignite UI for jQuery の最新バージョンにアップグレードしますが、現在のコードを選択通知を処理するために変更できない場合に便利です。
以下のバインド ハンドラーを igCombo の Knockout ハンドラーを読み込んだ後に定義します。
<script type="text/javascript">
ko.bindingHandlers.igComboPolyfill = {
init: function (element, valueAccessor) {
var combo = $(element),
isMultiple = valueAccessor().multiSelection ? valueAccessor().multiSelection.enabled : false;
ko.utils.registerEventHandler(element, "igcomboselectionchanged", function (evt, ui) {
var item = ui.items[0], dataItem, newText, newValue;
if (isMultiple) {
if (ko.isObservable(valueAccessor().text)) {
valueAccessor().text(combo.igCombo("text"));
}
} else {
if (item !== undefined) {
dataItem = item.data;
if (ko.isObservable(dataItem)) {
dataItem = dataItem();
}
newText = dataItem[valueAccessor().textKey];
newValue = dataItem[valueAccessor().valueKey];
if (ko.isObservable(valueAccessor().text)) {
if (ko.isObservable(newText)) {
newText = newText();
}
valueAccessor().text(newText);
}
if (ko.isObservable(valueAccessor().value)) {
if (ko.isObservable(newValue)) {
newValue = newValue();
}
valueAccessor().value(newValue);
}
}
}
});
ko.utils.registerEventHandler(element, "igcombodropdownclosed", function (evt, ui) {
if (isMultiple) {
if (ko.isObservable(valueAccessor().text)) {
valueAccessor().text(combo.igCombo("text"));
}
}
});
ko.applyBindingsToNode(element, { igCombo: valueAccessor() });
},
update: function (element, valueAccessor) {
var combo = $(element),
value = valueAccessor().text();
if (combo.igCombo("text") !== value) {
$(element).igCombo("text", value);
}
}
};
</script>
以前のロジックを使用し、監視可能項目を文字列として定義できます。
前
<script type="text/javascript">
var model = [
{ name: "Adam Sandler", id: "nm0001191" },
{ name: "Brooke Shields", id: "nm0000222" },
{ name: "Charles Chaplin", id: "nm0000122" },
];
var viewModel = new ViewModel(model);
function ViewModel(actorsList) {
this.selectedActor = ko.observable(actorsList[0].name);
}
</script>
<span id="comboActors" data-bind="igCombo: {
text: selectedActor,
textKey: 'name',
valueKey: 'id'
}"></span>
<input type="text" data-bind="value: selectedActor"/><br />
Lib | 以前の必要バージョン | 新しい必要バージョン |
---|---|---|
jQuery コア | 1.4.4 | 1.8.3 |
jQuery UI | 1.7 | 1.9.2 |
オンラインで表示: GitHub