在项目中,我们使用来自http://acoderinsights.ro/的AciTree 插件,以及复选框扩展,很棒的插件。当我们绘制具有 3000 多个节点的树时,我们遇到了一个问题。将所有节点加载到 DOM 需要 30 秒。另一个问题是,这棵树必须在页面上的多个位置动态显示,结构相同,但检查节点不同。也许独特的解决方案是缓存或克隆。在后台创建树,然后在需要时克隆此树,从而减少创建新 aciTree 对象的时间。我尝试了这个代码流,但没有运气。在页面加载时生成缓存并将其保存在内存中。代码可能包含错误,这仅针对逻辑流程显示。
var mytree = {
tree: {},
settings: {checkbox:true}
cache: function(radio){
var html = '<div id="selectbox_categories" class="aciTree"></div>';
mytree.tree = jQuery(html).aciTree(mytree.settings);
var api = mytree.tree.aciTree('api');
api.loadFrom(null, {'itemData': treeData, 'unanimated': true,
'success': function (){
console.log('Caching Success!');
/* Do some logic */
}
});
}
然后像这样调用函数来克隆 aciTree 对象。
function cloneTree( elem ) {
// elem is real empty html dom element in page
var box = jQuery(elem);
if( box.length > 0 ){
// Tried this but when using api on this, nothing happens...
var cloned = mytree.tree.clone(true, true);
box.replaceWith( cloned );
// Tried this also...
//box = jQuery.extend(true, {}, mytree.tree.clone(true, true));
var api = box.aciTree(mytree.settings);
// Tried this also...
//box.aciTree('init', js_category.settings);
var jsa = box.aciTree('api');
// When using api, for example check nodes nothing happens...
jsa.search(null, {
'search': id,
'success': function (i) {
console.log('found...');
jsa.check(jQuery(i));
},
'fail':function(){
console.log('failed...');
}
});
}
我的 javascript 知识很差,我想知道是否有可能使用事件等克隆整个 aciTree 对象,以便即时将树插入到页面 dom 中的请求位置。
感谢所有的建议...