2011-11-22 62 views
1

在我的骨幹應用程序的渲染函數中,我想用交替行的空行填充表的其餘部分,但我不知道要添加多少行。我試過this.el.clientHeight,$(this.el).height(),以及這些函數的所有其他排列讓它們都返回0.有人知道如何做到這一點嗎?我也不想添加太多,爲了不引入滾動條。如何在Backbone Views中獲取大小(高度/寬度)信息?

 

var bar = Backbone.View.extend({ 
    initialize: function(){ 
     _.bindAll(this, "render"); 
    }, 

    render: function(){ 
     var html = "<h1>Hi!</h1>"; 
     $(this.el).html(html); 
     var myWidth = this.el.width(); 
     alert(myWidth); 
     return this; 
    } 

}); 



var foo = Backbone.View.extend({ 
    el: $('#myElement'), 

    initialize: function(){ 
     _.bindAll(this, "render"); 
     this.subview = new bar(); 
    }, 

    render: function(){ 
     $(this.el).append(this.subview.render().el); 
     return this; 
    } 

}); 



 

解決方案爲那些堅持同樣的問題,因爲我有:你必須等待元素,以獲得高度/寬度信息充分附加到DOM。爲了解決這個問題,我在渲染完成後添加了一個postrender調用,該調用返回並處理了任何小細節。

+0

btw你知道你將寬度存儲在一個名爲myHeight的變量中嗎? – Jack

回答

2

嘗試獲得高度您附加後,(所以在「富」,而不是「巴」)。

例如,在「富」

render: function(){ 

    $(this.el).append(this.subview.render().el); 
    alert($(this.subview.el).height()); 
    return this; 
} 
0

您的視圖應該是這個樣子:

var myView = Backbone.View.extend({ 
    el: $('#myElement'), 

    initialize: function(){ 
     _.bindAll(this, "render"); 
    }, 

    render: function(){ 
     var myHeight = this.el.height(); 
     alert(myHeight); 
     return this; 
    } 

}); 

希望幫助

+0

檢查更新的問題 – chacham15

4

在某些瀏覽器,寬度和高度信息將不設置HTML後可以立即使用權。原因是你已經更新了DOM,但瀏覽器可能還沒有佈置新的頁面。

在過去,我採用了延遲打勾的方式,以便瀏覽器在測量之前有時間趕上。您可以使用underscore.defer()。例如:

render: function(){ 
    var html = "<h1>Hi!</h1>"; 
    $(this.el).html(html); 
    _.defer(_.bind(function() { 
    alert($(this.el).width()); 
    }, this); 
    return this; 
} 

此外,jQuery.width()可能會給你比clientWidth更好的兼容性。祝你好運!

相關問題