0

我阅读了许多关于 jsTree/Json/metadat 的建议,但我没有找到可行的解决方案。如果单击节点,我想获取元数据(例如 id)。

第一个我的 Json 数据:

[
  {
    "data":{
      "title":"TEST",
      "icon":"/i/small_folder.gif",
      "attr":{
        "id":"1000000000000000021"
      },
      "metadata":{
        "id":"1000000000000000021"
      }
    }
  }
]

第二个 JS 函数,它创建树并应该获得点击的 id(ajax 调用和一些 oracle apex 的东西)

function populateTree(pRegionId) {
  console.log('---Js Tree---');
  $.ajax({
    type : 'POST',
    async : true,
    url : 'wwv_flow.show',
    data : {
      "p_request" : 'APPLICATION_PROCESS=GET_TREE',
      "p_flow_id" : $v('pFlowId'), // app id
      "p_flow_step_id" : $v('pFlowStepId'), // page id
      "p_instance" : $v('pInstance'), // session id

    },
    ggg : pRegionId,
    success : function (data) {
      console.log(data);

      var jsonobj = JSON.parse(data);
      apex.jQuery("#" + this.ggg).jstree({
       "themes" : {
          "theme" : "default",
          "dots" : false,
          "icons" : true
        },
        "json_data" : {
          "data" : [jsonobj]
        },
        "plugins" : ["themes","json_data", "ui"]
      //}).bind("select_node.jstree", function (e, data) { alert(data.rslt.obj.data("jstree").id); });
        }).bind("select_node.jstree", function (e, data) {
          console.log(data);


        });

    }
  });
}

第三个id应该是的对象(firebug domview):

  args [a#1000000000000000301.jstree-clicked #, true, Object { originalEvent=Event click,  type=  "click",  timeStamp=30977664,  mehr...}]

inst  Object { data={...}, get_settings=function(), _get_settings=function(), mehr...}

rlbk false

rslt Object { obj={...}, e={...}}
  e Object { originalEvent=Event click, type="click", timeStamp=30977664, mehr...}  
  obj   jQuery(li.jstree-closed)

如您所见,没有ID。所以我猜元数据部分的东西很乱,但我不知道错误在哪里。

在此先感谢 马里奥

4

1 回答 1

4

最后我追查了我的错误。如果您可以从上面的 json 代码中看到:

[
  {
    "data":{
      "title":"TEST",
      "icon":"/i/small_folder.gif",
      "attr":{
        "id":"1000000000000000021"
      },
      "metadata":{
        "id":"1000000000000000021"
      }
    }
  }
]

元数据对象(?)像 attr 一样在数据对象中,所有在线验证都表明我的 jason 代码是有效的。但是元数据的正确位置是在数据之后:

[
  {
    "data":{
      "title":"TEST",
      "icon":"/i/small_folder.gif",
      "attr":{
        "id":"1000000000000000021"
      }
    },
    "metadata":{
      "id":"1000000000000000021"
    }
  }
]

现在我得到了下面的 js 的 id

.bind("select_node.jstree", function (e, data) {
          console.log(data.rslt.obj.data("id"));         
        });

如果您想在 li 标签中添加一个 id,请在数据对象之前放置一个 attr-object,例如:

[
  {
    "attr":{
      "id":"1000000000000000021"
    },
    "data":{
      "title":"TEST",
      "icon":"/i/small_folder.gif",
      "attr":{
        "id":"1000000000000000021"
      }
    },
    "metadata":{
      "id":"1000000000000000021"
    }
  }
]

很快马里奥

于 2013-02-19T08:38:39.553 回答