2

私のphpコードは、ツリービューで使用されるhierarchicalDataSourceの階層的なjsonデータセットを作成します。

この php 生成関数では、最初のリーフを selected=true に設定しています。したがって、ツリービューが表示されると、最初のリーフが自動的に選択されます。

問題は、ユーザーがリーフをクリックすると、イベント (onSelect) がトリガーされますが、UI 作成時にツリービューが表示されるときに発生する最初のノードの自動選択ではトリガーされないことです。

どうすればこれを修正できますか?

更新: デモを作成: http://jsbin.com/abapid/2/edit

4

2 に答える 2

2

プログラムでイベントをトリガーする場合は、次のselectようにする必要があります。

$("#treeview").data("kendoTreeView").trigger("select");
于 2013-08-13T16:52:42.447 に答える
1

他の人の利益のために....そして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;
    }
}); 

オナバイによる説明

  1. 選択したアイテムの一意の ID を uid に格納します。この ID は、作成するほとんどのノード、アイテムなどの Kendo UI によって導入されます。最初は未定義に設定しました(何も選択されていない場合に備えて)
  2. "now" には、現在選択されているノードが含まれます (存在する場合)。
  3. 要素が選択されている場合 (現在は !== 未定義)、選択されたノードのデータ項目を取得してから、このノードの UID を取得します。
  4. UID があり、以前に選択したノードの UID と異なる場合 (tree_view で拡張したばかりのフィールドに格納し、old_selected と呼んだ)、アラートを出します。
  5. 最後に、次回のために選択したノードの UID を保存します。

基本的に私が試みているのは、同じノードに対して 2 回連続してアラートを出さないように制御することです。それを制御するために、選択したノードの UID を 1 つの反復から次の反復まで保存します。

于 2013-08-14T16:48:54.223 に答える