2017-09-23 109 views
0

我想在我的Rails應用程序來實現我的機構模型一個TreeView,我已經添加ancestry gem到我的模型,它的工作原理,並treeview我的看法也可以工作如何分析活動記錄層次結構,以JavaScript數組

但我真的不知道發出正確的數據的方式,我認爲需要一個JS數組是這樣的:

var tree = [ 
    { 
    text: "Parent 1", 
    nodes: [ 
     { 
     text: "Child 1", 
     nodes: [ 
      { 
      text: "Grandchild 1" 
      }, 
      { 
      text: "Grandchild 2" 
      } 
     ] 
     }, 
     { 
     text: "Child 2" 
     } 
    ] 
    }, 
    { 
    text: "Parent 2" 
    }, 
    { 
    text: "Parent 3" 
    }, 
    { 
    text: "Parent 4" 
    }, 
    { 
    text: "Parent 5" 
    } 
]; 

我做了一個Web服務返回一個文本,然後調用它上裝:

request = $.ajax({ 
     url: '/get_institutions_tree', 
     type: 'GET', 
     dataType: "text", 
     success: function(data){ 
      $('#tree').treeview({data: data}); 
     } 
    }); 

但我真的不知道如何構建陣列,我試圖手動解析它,我有這個在我的控制器(我會盡量做到遞歸不知何故後來):

def get_institutions_tree 
    institutions = Institution.roots 

    data = "var data = [ " 
    institutions.each do |institution| 
     data << get_subtree(institution) 
    end 
    data << " ];" 

    render json: data 
    end 

    private 

    def get_subtree(institution) 
    subdata = "{" 
    subdata << "text: '" << institution.name << "'," 
    subdata << "}" 
    end 

這對於現在的Web服務將返回此(1米深度),但它返回一個文本(「串」),如果我只是爲它分配它不工作:

var data = [ {text: 'Nacional Bogota',}{text: 'Nacional Cali',} ]; 

我怎樣才能使這項工作?有沒有更好的/更清潔的方式來實現這一目標? 在此先感謝

回答

0

我沒有使用祖先或treeview寶石,但它似乎是建立一個字符串作爲json對象數組,而你可以使用數組和json對象。

在機構循環中,我會填充一個根數組。例如:

data = [] 
institutions.each do |institution| 
    data << get_subtree(institution) 
end 

然後,get_subtree應該是遞歸的,以獲得所有級別。它應該建立一個JSON。例如:

def get_subtree(institution) 
    sub = { :text => institution.name } 
    children = institution.children 
    if children 
    sub.nodes = [] 
    children.each do |child| 
     sub.nodes << get_subtree(child) 
    end 
    end 
    sub 
end