首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Dojo Tree 與 ComboBox 聯動實作:選中 ComboBox 值自動展開 Tree 至對應節點

     編輯:程式設計綜合問答

需求

  1. 點擊 Tree 節點 → ComboBox 顯示節點名稱(已實作)。
  2. ComboBox 選值變更 → Tree 自動展開至對應節點路徑。

核心難點

ComboBox 值(字串)需映射到 Tree 樹形結構中的唯一路徑 ['world','AF','KE'],以呼叫 tree.set('path', pathArray)。

解決方案(原答案實作邏輯)


// 1. ComboBox onChange 事件
var comboBox = new ComboBox({
    store: myStore,          // 共用資料源
    searchAttr: "name",      // 顯示屬性
    onChange: function(selectedName) {
        // 2. 在資料源中查找對應物件
        var results = myStore.query({name: selectedName});
        if (!results.length) return;
        var item = results[0];

        // 3. 向上遞迴收集父節點 ID,構建路徑陣列(父在前)
        var path = [];
        var current = item;
        while (current) {
            path.unshift(current.id); // 或 current.name,依 Tree path 設定
            current = myStore.getParent(current); // 假設 store 支援 getParent
        }

        // 4. 應用至 Tree
        tree.collapseAll();           // 先收合
        tree.set('path', path).then(function() {
            // 路徑展開完成
        });
    }
});

關鍵 API

  • store.query({name: value}):依屬性查找項目。
  • store.getParent(item) / store.getChildren(parent):樹形導航(需 store 實作 dojo/store/Observable + dijit/tree/ObjectStoreModel)。
  • tree.set('path', idArray):展開至指定路徑(單一路徑用 path,多路徑用 paths)。
  • tree.collapseAll():重置視圖。

資料格式要求

JSON 必須包含 id、name、parent(或 children)欄位,符合 dijit/tree/ObjectStoreModel 期望結構。參考官網範例:Dojo Tree Examples。

原答案核心

「使用 ComboBox onChange → myStore.query → 迭代父級構建陣列 → tree.set('path', array)」

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved