1

我使用Fuel UX Tree框架来加载树视图数据。

在第一次加载文档时,树视图正确呈现,但是当我尝试使用 new 重新加载树时DataSource,我什么也得不到。

这是我的代码示例:

树 UI 模板:

<div id="MyTree" class="tree tree-plus-minus tree-no-line tree-unselectable">
    <div class="tree-folder" style="display:none;">
        <div class="tree-folder-header">
            <i class="fa fa-folder"></i>
            <div class="tree-folder-name">
            </div>
        </div>
        <div class="tree-folder-content">
        </div>
        <div class="tree-loader" style="display:none">
        </div>
    </div>
    <div class="tree-item" style="display:none;">
        <i class="tree-dot"></i>
        <div class="tree-item-name">
        </div>
    </div>
</div>

树 UI 初始化函数:

var UITree = function () {

    return {
        //main function to initiate the module
        init: function (el, data) {
            if (typeof el != 'undefined' && typeof data == 'object') {

                var DataSourceTree = function (options) {
                    this._data  = options.data;
                    this._delay = options.delay;
                };

                DataSourceTree.prototype = {
                    data: function (options, callback) {
                        var self = this;
                        var data = $.extend(true, [], self._data);
                        callback({ data: data });
                    }
                };

                var treeDataSource = new DataSourceTree(data);  


                $(el).tree({
                    selectable: false,
                    dataSource: treeDataSource,
                    loadingHTML: '<img src="assets/img/input-spinner.gif"/>',
                });
            }
        }
    };

}();

.

使用 Ajax 加载数据后,我调用init函数:

//my data from ajax result
var myData = {
  "data": [
    {
      "name": "some_name",
      "type": "item"
    },
    {
      "name": "some_name_2",
      "type": "item"
    }
  ]
};


// call tree init to render data
UITree.init($('#MyTree'), myData);

函数正常工作,并且仅在第一次加载页面时呈现树,而不是在下一次 Ajax 调用时。

4

1 回答 1

5

最后我找到了解决方案。也许这不是最佳做法,但这是我发现的唯一方法:

当元素已经分配数据属性时看起来Fuelux Tree UI不起作用,所以我做了这个:

// 1. Clear MyTree wrapper template with: 
$('#MyTree .tree-item:visible').remove();

// 2. remove assigned data from template element object
delete($('#MyTree').data().tree);

// 3. Refactor Tree UI
$('#MyTree').tree({
    selectable: false,
    dataSource: {
        data: function(options, callback) {
            callback(MyData);
        }
    }
});

我在互联网上搜索,重新阅读Fuelux文档,但没有提到重构Tree UI,所以如果有人会遇到同样的问题,这个解决方案可以提供帮助。

于 2014-07-19T20:45:31.213 回答