Javascript 一旦页面加载到主干网/木偶网应用程序中,如何获取DOM元素的高度?

Javascript 一旦页面加载到主干网/木偶网应用程序中,如何获取DOM元素的高度?,javascript,jquery,backbone.js,marionette,Javascript,Jquery,Backbone.js,Marionette,我有一个主干/木偶布局,其中有一些视图。我需要将两个视图(基本上是两个当前高度不同的div)的高度调整为相同 我使用了$(document).ready(函数(){})就在结束主体标记之前和处理视图加载以获取高度的所有脚本之后,但它输出null。为什么呢?当页面完成加载后,如何获得以下CompositeView的高度 List.TopQueries = Backbone.Marionette.CompositeView.extend({ template: "#topqueries-templa

我有一个主干/木偶布局,其中有一些视图。我需要将两个视图(基本上是两个当前高度不同的div)的高度调整为相同

我使用了
$(document).ready(函数(){})就在结束主体标记之前和处理视图加载以获取高度的所有脚本之后,但它输出null。为什么呢?当页面完成加载后,如何获得以下CompositeView的高度

List.TopQueries = Backbone.Marionette.CompositeView.extend({
template: "#topqueries-template",
itemView: List.QueryItem,
className: "block blue",

appendHtml: function (collectionView, itemView) {
  // Do something here
},
onRender: function () {
  // Do something here
},

onClose: function () {
  // do something here
}
});

List.FailedQueries = Backbone.Marionette.CompositeView.extend({
template: "#failedqueries-template",
itemView: List.QueryItem,
className: "block red",

appendHtml: function (collectionView, itemView) {
  // Do something here
},
onRender: function () {
  // Do something here
},

onClose: function () {
  // Do something here
}
});

对于已经附加到DOM的UI中的任何与检查有关的内容(如在您的示例中检查某些div的大小),您应该使用“onDomRefresh”事件

如果您需要“等待”直到布局中的某些视图被呈现并完全连接到DOM,那么您应该听这些视图的
onDomRefresh
,而不是布局中的视图

当布局本身完全连接到DOM时,将触发布局的
onDomRefresh
。它不会等到它的所有子区域都显示了一个视图(毕竟,您可以随时在布局子区域中显示/关闭视图,所以这没有多大意义)

(我以为你在问木偶的布局,所以上面的解释,我把它留在那里,因为它可能值得知道)


尽管如此,Evgeniy建议使用CSS来处理不需要Javascript的问题,这可能是解决特定问题的更好方法(我回答的是首要问题:一旦页面加载到主干/木偶应用程序中,如何获得DOM元素的高度?)

如何比较两个CompositeView的高度并将其设置为相同高度?我需要计算哪一个更高,并将较短的一个的高度设置为较高的一个的高度。如果我只在一个视图中处理onDomRefresh事件,我会怎么做呢?我以为你在谈论木偶布局,所以我在回答中解释了更多。现在我看到您正在谈论两个不同的复合视图,所以您应该在这两个视图上收听onDomRefresh!:)如何在另一个视图的onDomRefresh事件中访问一个视图的计算高度?这不是一个好方法。您应该拥有一个“父”视图(例如布局,我认为您正在使用的),并从那里处理子视图的onDomRefresh。不过,如果这种方法对于您的特定问题来说太难了,您可能需要考虑使用CSS来修复它。这与解决问题的方法相反,你能描述一下视图结构吗?考虑一下用普通的方法解决这个问题css@Evgeniy我用视图编辑了这个问题。这接近你要达到的目标吗?html标记是否接近您的输出?从布局的角度来看,这是我想要的输出。我使用Chrome inspector将这些属性应用到我的布局中,但它不起作用。请将您的html输出+css附加到您的布局中-最好使用fiddle并附加链接
Backbone.Marionette.ItemView.extend({
    onDomRefresh: function(){
    // manipulate the `el` here. it's already
    // been rendered, and is full of the view's
    // HTML, ready to go.
    }
});