他の人の利益のために....そしてOnaBaiに感謝します!...ここに解決策があります!
Kendo UI には、他の UI SDK が常に提供する多くの基本機能が欠けています。それらの 1 つは、ウィジェットが描画されるとトリガーされる「onDisplay」のようなイベントです。これにより、アプリケーションは、dataSource が「selected = true」フィールドを含むノードをロードした私のような特定のケースに反応できるようになります。
Kendo TreeView は、ノードが選択されていることを示すことによって反応しますが、ほとんどの現実のシナリオでは、アプリケーションも反応する必要があります。そのため、ノードが選択されているかどうかを確認し、それに応じて反応するために、ウィジェットの初期化時に呼び出す必要があります。
私たち ( OnaBai ) が見つけた唯一のハックは、"DataBound" イベントを "onDisplay" の種類のイベントとして使用することです。このイベントは、親ノードが子として何らかの形で変更されるたびに発生するということです。したがって、複数回呼び出されます。
この制限を回避するためのコードを次に示します。
http://jsbin.com/ejabul/4/edit (ページのリロードをシミュレートするには、[Run with JS] をクリックする必要があることに注意してください)
$("#treeview").kendoTreeView({
dataSource:data,
dataTextField: "text",
select: onSelect,
dataBound: function (e) {
var uid = undefined;
var now = this.select();
if (now) {
var data = this.dataItem(now);
uid = data.uid;
if (uid && uid !== this.old_selected) {
alert("Bingo !");
}
console.log("data", data.uid);
}
this.old_selected = uid;
}
});
オナバイによる説明
- 選択したアイテムの一意の ID を uid に格納します。この ID は、作成するほとんどのノード、アイテムなどの Kendo UI によって導入されます。最初は未定義に設定しました(何も選択されていない場合に備えて)
- "now" には、現在選択されているノードが含まれます (存在する場合)。
- 要素が選択されている場合 (現在は !== 未定義)、選択されたノードのデータ項目を取得してから、このノードの UID を取得します。
- UID があり、以前に選択したノードの UID と異なる場合 (tree_view で拡張したばかりのフィールドに格納し、old_selected と呼んだ)、アラートを出します。
- 最後に、次回のために選択したノードの UID を保存します。
基本的に私が試みているのは、同じノードに対して 2 回連続してアラートを出さないように制御することです。それを制御するために、選択したノードの UID を 1 つの反復から次の反復まで保存します。