我正在研究一個呈現相同視圖的多個實例的Backbone應用程序。每個視圖都有一個相當大的節點樹,我可以看到用戶代理無法即時呈現視圖。呈現引擎延遲會影響javascript中的測量尺寸
我遇到的問題是,當我的渲染回調觸發時,高度正在通過0
,因爲用戶代理的渲染引擎並未實際完成渲染整個視圖。如果我設置超時,則正確的最終高度將通過:
var ChildView = window.Backbone.View.extend({
render: function() {
var template = require('templates/ChildTemplate');
this.$el.html(template());
this.afterRender();
},
afterRender: function() {
console.log(this.$el.outerHeight()); // 0
var _this = this;
setTimeout(function(){
console.log(_this.$el.outerHeight()); // 51 (or some non-zero integer)
}, 100);
setTimeout(function(){
console.log(_this.$el.outerHeight()); // 240, full correct height
}, 300);
}
});
如何解釋此渲染引擎延遲?
架構:
- 的jQuery 1.7.2
- 骨幹0.9.9
它可能比這更復雜。我目前遇到了一個Chrome問題,其中DOM元素的更改不會被JavaScript DOM屬性反映至少幾毫秒。這實際上使我的代碼亂成一團;如果我有一條條件或循環語句鏈,我在其中進行DOM修改,然後在JavaScript中測量某些內容,則必須將我的代碼分解爲可通過setTimeout按順序調用對方的一系列塊。在這種情況下,Chrome優化團隊讓我的生活比需要的困難得多。 –