2014-07-16 70 views
1

我是Backbone的新手,並試圖絆倒我的方向。目前我有一個視圖,可以將json散列渲染到下拉菜單中。當我檢查瀏覽器中的元素時,我可以實際查看UL元素,並將所有JSON渲染爲一個列表,但瀏覽器中沒有任何內容可見。應該注意的是,我使用twitter引導來構建下拉菜單。任何幫助深表感謝。在Backbone中渲染下拉菜單

App.Views.FilterView = Backbone.View.extend({ 
    initialize: function(){ 
    _.bindAll(this, 'render'); 
    this.$button = this.$('.dropdown'); 
    this.listenTo(this.collection, 'sync', this.render); 
}, 

render: function(){ 
    html = _.template(this.template()); 
    this.$el.html(html); 
}, 

template: function() { 
    var criteria = initial_data.criteria_hash.servers.criteria;  
    var list = ""; 

    for(var i = 0; i < criteria.length; i++){ 
    list += "<li role=\"presentation\">" + criteria[i] + "</li>"; 
    } 
    return "<ul class='criteria-list dropdown-menu' role=\"menu\">" + list + "</ul>"; 
    } 
}); 

這裏是HAML:

%h2.beta Reports 
     .criteria-container 
     .dropdown 
      %button.btn.btn-default.dropdown-toggle{"data-toggle" => "dropdown"} 
      Search Criteria 
      %span.caret 
+0

你正在初始化你的下拉列表嗎?例如在你的渲染函數'this。的末尾。$ el.find('。dropdown-toggle')。dropdown()' – Jack

+0

不,我試過了,但它似乎沒有區別 –

+0

你可以創建一個[ jsbin](http://jsbin.com/)或[jsfiddle](http://jsfiddle.net/)? – Jack

回答

1

看起來要覆蓋的加價下拉的一部分。在渲染功能中,您只需重新調整ul的降價,但您將覆蓋整個el

如果你包括在你的模板功能按鈕標記它應該工作

template: function() { 
    var criteria = initial_data.criteria_hash.servers.criteria; 
    var list = ""; 

    for(var i = 0; i < criteria.length; i++){ 
     list += "<li role=\"presentation\">" + criteria[i] + "</li>"; 
    } 
    return "<button class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\">Search criteria<span class=\"caret\"></span></button><ul class='criteria-list dropdown-menu' role=\"menu\">" + list + "</ul>"; 
    } 
}); 

而這裏的一個jsbin

鏈接你可能也發現很容易模板的標記語言中分離並將其放置在HTML頁面或外部頁面的腳本標記中。

+0

不錯!現在我在瀏覽器中,但下拉本身似乎破壞 –

+0

對不起,我沒有真正與bootstrap合作,但我懷疑標記是關閉的。首先看看你是否可以按照自己的意願看待你的下拉菜單(這是沒有動態渲染的)。 – Jack

+0

它看起來像我鏈接到較舊版本的引導程序,我更新了[jsbin](http://jsbin.com/hagohuho/2/),下拉菜單現在看起來似乎正確。 – Jack