zoukankan      html  css  js  c++  java
  • jquery json select tree for ruby on rails

      #for product edit page category ajax usage
      def all
        def recursion(c)
          (0..c.children.size-1).each do |j|
            cc=c.children[j]
            $str+='"'+cc.name+'":{'
            if cc.children.size==0
              #level+=1
              $str+="\"\":#{cc.id}}"
            else
              recursion(cc)
            end
            if j!=(c.children.size-1)
              $str+=","
            else
              $str+="}"
            end
          end
        end    
        $str="{"
        $level=1
        $left=1
        $right=0
        top=Category.top
        (0..top.size-1).each do |i|
          c=top[i]
          $str+='"'+c.name+'":{'
          if c.children.size==0
            #level+=1
            $str+="\"\":#{c.id}}"
          else
            recursion(c)
          end
          if i!=(top.size-1)
            $str+=","
          else
            $str+="}"
          end
        end
        
        puts $str
        respond_to do |format|
          format.html { render :text=>$str}
          #format.js   { render :json => @options }
          #format.xml  { render :xml => @categories }
        end    
      end
    该方法生成
    {"办公":{"文具":{"":13},"电脑周边":{"U盘":{"":15},"鼠标/键盘":{"":16}}},"休闲":{"":11},"潮流":{"":12}}
    这样的数据,为了配合http://code.google.com/p/jquery-option-tree/
    进行显示
    客户端例子
    <h2>Example 1</h2>
    <input type="text" name="demo1" />
    <script type="text/javascript">
    $(function() {
        var option_tree = {
           "Option 1": {"Suboption":200},
           "Option 2": {"Suboption 2": {"Subsub 1":201, "Subsub 2":202},
               "Suboption 3": {"Subsub 3":203, "Subsub 4":204, "Subsub 5":205}
              }
        };
        
        option_tree={"办公":{"文具":{"":13},"电脑周边":{"U盘":{"":15},"鼠标/键盘":{"":16}}},"休闲":{"":11},"潮流":{"":12}}
        var options = {
                empty_value: 'null',
                //indexed: true,  // the data in tree is indexed by values (ids), not by labels
                preselect: {'demo1': ['办公']} // array of default values - if on any level option value will be in this list, it will be selected
                                                                            // be careful of variable types - '111' !== 111
            };
        $('input[name=demo1]').optionTree(option_tree,options);
    });
    </script>
    <code><pre>
    &lt;input type="text" name="demo1" /&gt;
        var option_tree = {
           "Option 1": {"Suboption":200},
           "Option 2": {"Suboption 2": {"Subsub 1":201, "Subsub 2":202},
               "Suboption 3": {"Subsub 3":203, "Subsub 4":204, "Subsub 5":205}
              }
        };
        $('input[name=demo1]').optionTree(option_tree);
    </pre></code>
    最后我们要使用example的例子,使用ajax进行连动,这样就不用递归构造一个完整的json tree了,以上的东西就没用了,花了一个半上午,
    递归和递归转非递归忘记了,是慢慢调出来了,不过,其实第一遍就差不多写对了,好像是自己没看清楚{}}对
    这个可以做为一道考题来做
  • 相关阅读:
    call方法的实现
    es6扩展字符串
    关于this的错题
    当promise实例A的resolve值为另一个promise实例对象B时,这个实例对象B的状态会替代实例对象A的状态。
    new Promise 出来的promise实例对象的默认状态是pendding,不能像then/catch方法一样返回一个新的promise实例对象!!!
    中断promise链式调用(中间返回一个pendding状态的promise)
    测试分析promise异常穿透原理
    .then内的回调函数返回结果为一个promise实例对象时,这个.then返回的promise结果就是回调函数内的promise实例对象的返回结果(等待回调函数内的promise实例对象有了结果再返回)
    vue 学习笔记(一)
    three.js初涉略(一)
  • 原文地址:https://www.cnblogs.com/lexus/p/1864458.html
Copyright © 2011-2022 走看看