From ce49858187f9d8e483125c45bc6aef712899cd5b Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 21 May 2024 14:47:08 +0800 Subject: [PATCH] bugfix --- bricks/tree.js | 316 +++++++++++++++++++++---------------------------- 1 file changed, 132 insertions(+), 184 deletions(-) diff --git a/bricks/tree.js b/bricks/tree.js index 63f58cf..fe02084 100755 --- a/bricks/tree.js +++ b/bricks/tree.js @@ -1,19 +1,19 @@ var bricks = window.bricks || {}; bricks.TreeNode = class extends bricks.VBox { - constructor(tree, parent, data){ + constructor(tree, pnode, data){ var opts = { width:'100%', height:'auto', } super(opts); this.tree = tree; - this.parent = parent; + this.parent_node = pnode; this.children_loaded = false; - this.data = data; - this.is_leaf = this.data.is_leaf; - this.params = {id:this.data[this.tree.opts.idField]}; + this.user_data = data; + this.is_leaf = this.user_data.is_leaf; + this.params = {id:this.user_data[this.tree.opts.idField]}; if (this.tree.multitype_tree){ - this.params['type'] = this.data[this.tree.opts.typeField]; + this.params['type'] = this.user_data[this.tree.opts.typeField]; } var n = new bricks.HBox({ height:this.tree.row_height, @@ -24,21 +24,21 @@ bricks.TreeNode = class extends bricks.VBox { n.bind('click', this.tree.node_click_handle.bind(this.tree, this)); this.node_widget = n; this.create_node_content(n); - if (! this.data.is_leaf) { + if (! this.user_data.is_leaf) { this.container = new bricks.VBox({height:'auto'}); this.add_widget(this.container); this.container.dom_element.style.marginLeft = bricks.app.charsize + 'px'; - if (this.data.children){ - this.tree.create_node_children(this, this.data.children); + if (this.user_data.children){ + this.tree.create_node_children(this, this.user_data.children); } this.container.hide(); } } getValue(){ - return this.data; + return this.user_data; } get_id(){ - return this.data[this.tree.idField]; + return this.user_data[this.tree.idField]; } selected(flg){ if (flg){ @@ -93,7 +93,7 @@ bricks.TreeNode = class extends bricks.VBox { widget.add_widget(this.check_w); this.check_w.bind('changed', this.tree.node_checked.bind(this.tree, this)) } - var dtype = this.data[this.tree.opts.typeField]; + var dtype = this.user_data[this.tree.opts.typeField]; var icon = objget(TypeIcons, dtype); if (!icon && this.tree.opts.default_type){ icon = objget(TypeIcons, his.tree.opts.default_type); @@ -105,7 +105,8 @@ bricks.TreeNode = class extends bricks.VBox { url:icon }); widget.add_widget(img); - var txt = this.data[this.tree.opts.textField]; + // console.log('info:textField=', this.tree.textField, 'data=', this.user_data, 'tree=', this.tree, 'tree opts=', this.tree.opts); + var txt = this.user_data[this.tree.opts.textField]; this.str_w = new bricks.Text({text:txt}); this.input = new bricks.UiStr({name:'text', value:txt}); this.input.bind('blur', this.edit_handle.bind(this)); @@ -121,7 +122,7 @@ bricks.TreeNode = class extends bricks.VBox { return; var v = this.input.value; r = await this.syncdata('edit'); - this.data[this.tree.opts.textField] = v; + this.user_data[this.tree.opts.textField] = v; this.str_w = new bricks.Text({text:v}); this.node_widget.remove_widget(this.input); this.node_widget.add_widget(this.str_w); @@ -174,14 +175,19 @@ bricks.Tree = class extends bricks.VScrollPanel { if (this.opts.dataurl){ schedule_once(this.get_children_data.bind(this, this), 0.1); } else { + this.user_data = { + id:null, + children:this.opts.data + } this.create_node_children(this, this.opts.data); } + this.bind('node_selected',this.node_info_log.bind(this)); } getValue(){ - return this.data; + return this.user_data; } get_id(){ - return this.data[this.idField]; + return this.user_data[this.idField]; } create_toolbar(){ var toolbar = bricks.extend({}, this.toolbar); @@ -219,31 +225,120 @@ bricks.Tree = class extends bricks.VScrollPanel { var d = event.params; var node = this; if (this.selected_node){ - d[this.parentField] = this.selected+node.get_id(); node = this.selected_node; + d[this.parentField] = node.get_id(); } var jc = new bricks.HttpJson() - var desc = jc.post(this.editable.add_url, {params:d}); + var desc = await jc.post(this.editable.add_url, {params:d}); if (desc.widgettype == 'Message'){ var data = desc.options.user_data; - this.build_subnode(node, data); + this.append_new_subnode(node, data); } var w = await bricks.widgetBuild(desc, this); + w.open(); } async create_tree_nodes(node, records){ for (var i=0;i