jstree使用之四 jstree1.0使用-修订原来的不完美的地方

jquery和javascript不会因为程序的排名而又任何变化,他们依然以十足的活力,在web开发中纵马驰骋。rails和ruby也是 一样,及时是一把钝刀,用的熟了,那也可以庖丁解牛,况且这两R就像足球场上的每个罗纳尔多一样,犀利无比。总之,坚持,就像开放一样,是软件开发者、团队的终身信条。

废话一堆,这里将jstree前面曾经采用的创建node的变通方法,进行修改。

1.首先明确在展示tree的时候,不能够将所有node的status设定为closed,必须加以判断,如果有child,则设置为closed,如果没有child,则设置为opened;

所以将private方法修改如下:

 

def get_region_tree_json(regions)
json_data = String.new
json_data += "["

regions.each do |region|
unless region.child_regions.blank?
json_data += "{\"data\":\"#{region.name}\",\"attr\":{\"id\":\"#{region.id}\"},\"state\":\"closed\"}"
else
json_data += "{\"data\":\"#{region.name}\",\"attr\":{\"id\":\"#{region.id}\"},\"state\":\"opened\"}"
end
json_data += "," unless region == regions.last
end
json_data += "]"
return json_data
end
 

 

 

2.只是做上述工作还有问题:会发现创建的树节点出现一下,又消失,感觉没有创建成功。如果你刷新,这个新建节点还是很稳健的出现了,说明保存在库中了。删除节点、修改节点都是这样。于是对这三个action作如下修改:

 def create
    @region = Region.create(
      :parent_region_id=>params[:id],
      :name=>params[:name],
      :creator_id=>current_user.id
    )
    render :text =>"{\"id\":\"#{@region.id}\",\"status\":\"1\"}"
  end

  def update
    if Region.find(params[:id]).update_attributes(:name=>params[:name])
    render :text => "{ \"status\" : 1 }"
    else
    render :text => "{ \"status\" : 0 }"
    end

  end
  
  def destroy
    region = Region.find(params[:id])
    if region.child_regions.blank?
      if region.destroy
      render :text => "{ \"status\" : 1 }"
      else
      render :text=> "{ \"status\" : 0 }"
      end
    else
     flash[:notice] = "不能删除有子节点的节点"
    end
    
  end

 

增加了render代码,以符合json格式的方式,发送出去。

这些数据到了javascript前端;

 

3.需要在post这个ajax方法配置参数的时候,增加一个配置内容,即在function后面配置数据格式为“json”,前面遗漏了。下面是remove的代码,create、rename都需要这样做

    .bind("remove.jstree", function (e, data) {
      $.post(
      "/admin/regions/destroy",
      {
        "id" : data.rslt.obj.attr("id")
      },
      function (r) {
        if(!r.status) {
          $.jstree.rollback(data.rlbk);
        }
      },
      'json'
    );
    });

 

这样增删改都可以了。

 

 

 

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