jstree使用之三 jstree1.0使用-修订服务端的代码

之二中的代码可以实现树的展示、修改和删除,但是在新增中存在如下问题:

如果节点下没有child,则不能创建新的节点,这也就是在测试的时候,为什么会出现有的时候,可以创建子节点,有时候不成功。

后来采用fire debug看的时候,发现在创建一个child node时候,总是要到后台先抓取tree,而后台的服务器代码如下:

  def get_tree
    if  params[:id] == 'false'
      @regions = Region.find(:all,:conditions=>"parent_region_id is NULL")
      json_data = get_region_tree_json(@regions)
    else
      @regions = Region.find(params[:id]).child_regions
        json_data = get_region_tree_json(@regions)
    end
    #发送json格式的子树数据,让前端javascript显示子树。
    respond_to do |format|
      format.json {render :text=>json_data}
    end
  end

 

如果鼠标点击的node送出去的region id 在库里没有子节点,将不会生成json。

变通方法:在上述的else代码中增加一个判断,“如果@regions为空,则创建一个空的json串”,便于jstree可以展开子树,而这个子树只是一个虚拟树,并保存在库中,虽然有点别扭,但是可以使用。

get_tree代码变为如下:

  def tree
    if  params[:id] == 'false'
      @regions = Region.find(:all,:conditions=>"parent_region_id is NULL")
      json_data = get_region_tree_json(@regions)
    else
      @regions = Region.find(params[:id]).child_regions
      unless @regions.blank?
        json_data = get_region_tree_json(@regions)
      else
        #如果本节点下暂时没有子节点,在树中显示一个虚拟节点,便于创建新的节点。
        json_data = "[{\"data\":\"虚拟节点\",\"attr\":{\"id\":\"\"}}]"
      end
    end
    #发送json格式的子树数据,让前端javascript显示子树。
    respond_to do |format|
      format.json {render :text=>json_data}
    end
  end

 

这样基本的树的创建、删除、重命名都可以完成了。

欢迎各位将更加好的关于创建的方法,写出来。

你可能感兴趣的:(JavaScript,json)