如何为树节点增加自定义属性

如何为树节点增加自定义属性,第1张

请不要再多给节点添加 click 事件了,完全没有必要,只会影响性能。 zTree 是以节点数据为核心,并且提供了自己的 onClick 回调,而且 zTree 的所有回调都会返回 节点数据 json 对象,通过 json 对象你可以随意取得自定义的任何属性。 例如: 你自定义了 A属性, 在节点 “aa 内, 那么节点aa 的数据可能为: {name:aa, id:1, pId:-1, A:test} 那么在任何回调中得到的 treeNode 数据就是这个 json 对象的clone,获取A 只需要: treeNode.A 另外,你也可以利用 调试工具 console.log 打印 treeNode ,就可以看到了

对于zTree树控件,节点的默认提示信息title是节点的name,也就是默认显示节点的名称。你认真了解zTree,不难发现主要是key值在作祟:

view sourceprint?

1.var setting = {

2.data: {

3.key: {

4.title: "s"//这里的s表示节点内的s属性

5.},

这里的key内的title默认指向的就是name属性,或者为空,为空的时候也会默认为name属性。

针对这位朋友的问题,其实方法很多:

1、在后台构造属性

在ajax页面内从数据库拿到数据list过后通过new的形式给最终返回的json对象构造一个属性t出来。然后修改setting内key的title指向属性值为t即可。

返回的json对象数据为:

view sourceprint?

1.var zNodes =[

2.{ id:1, pId:0, name:"节点搜索演示 1", t:"节点提示信息1", open:true},

3.{ id:11, pId:1, name:"关键字可以是名字", t:"节点提示信息2"},

4.{ id:12, pId:1, name:"关键字可以是level", t:"节点提示信息3"}

5.]

修改setting内对应的key值

view sourceprint?

1.var setting = {

2.data: {

3.key: {

4.title: "t"//这里的s表示节点内的s属性

5.},

2、动态修改树节点的属性

当前台给zTree树对象赋值结束后获取所有树节点,然后逐个更新树节点的属性值,示例代码如下所示:

view sourceprint?

01.$(document).ready(function () {

02.$.fn.zTree.init($("#treeDemo"), setting, zNodes)

03.//获取树对象

04.var treeObj = $.fn.zTree.getZTreeObj("treeDemo")

05.//拿到所有树节点

06.var nodes = treeObj.getNodes()

07.//for循环逐个修改树节点属性

08.for(var i = 0i<nodes.lengthi++)

09.{

10.nodes[i].t = "可以自定义排序"

11.//更新节点

12.treeObj.updataNode(nodes[i])

13.}

14.})

当前如果只是修改部分节点可以在for内加以控制,如果是只更新指定节点可以通过getNodeByParam("属性名称","值",父节点对象)找到指定对象,形如:

view sourceprint?

1.//给节点追加属性

2.var treeObj = $.fn.zTree.getZTreeObj("treeDemo")

3.var node = treeObj.getNodeByParam("id", 1, null)

4.node.s = "可以自定义排序"

5.treeObj.updateNode(node)

自定义控件中自定义属性的定义和使用方式。

第一步当然是自定义类EditTextNoEmoji继承EditText,同时重写三个构造方法。这里需要注意的是,三个构造方法中必须分别实现父类对应的构造方法,就是三个super();而不能出现调用当前类的不同参数的另一个构造方法的形式,就是不能出现this()。否则的话,这个控件在实际使用时是获得不到焦点的,似乎是由于EditText继承TextView的原因,具体原因待查。

谈谈这三个构造方法的区别,一参的构造EditTextNoEmoji(Context context),是在使用的java文件中动态生成时调用,两参的构造EditTextNoEmoji(Context context, AttributeSet attrs),是在使用的xml文件中静态生成时调用,三参的构造基本不会使用,暂且不讨论。而两参构造中的第二个参数attrs,正是我们要自定义的属性,所以在该方法中调用setAttrs(context, attrs)设置xml文件中使用到的自定义属性。

第二步需要声明自定义属性控制是否禁止输入表情,同时为了方便该控件在使用时的xml布局中配置该属性,要先在res/values/styles.xml中自定义属性名称。自定义属性的styleable名称必须是和自定义控件的类名保持一致的,在这个样式下可以添加任意的自定义属性,如下代码,添加了一个boolean类型的属性,名称为canInputEmoji。另外可以添加的属性类型包括 color,boolean,dimension,enum,flag,float,fraction,integer,reference,string等十种。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11811923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存