我正在使用Backbone和JQuery,并希望创建一个create equal height columns as described in method 2 of this link的主干视图。 HTML看起来像这样:
<div class="container">
<div id="leftcolumn" class="set_equal_height"> … Lots Of Content … </div>
<div id="middlecolumn" class="set_equal_height"> … Lots Of Content … </div>
<div id="rightcolumn" class="set_equal_height"> … Lots Of Content … </div>
</div>
我把以下的Backbone View放在一起,但它大概不起作用,因为使用.each的循环不起作用(页面加载时没有错误,但是列的高度没有被javascript修改):
define([
'jquery',
'underscore',
'backbone',
], function($, _, Backbone) {
var SetEqualHeight = Backbone.View.extend({
initialize: function() {
var tallestcolumn = 0;
console.log(this.$el.height());
console.log(this.$el.attr("id"));
this.$el.each(function() {
currentHeight = $(this).height();
console.log(currentHeight);
if(currentHeight > tallestcolumn) {
tallestcolumn = currentHeight;
}
});
this.$el.height(tallestcolumn);
},
});
return SetEqualHeight;
});
我定义了&#34; el&#34;单独的Wire规范中的参数如下:{el:&#39; div.set_equal_height&#39;因为&#34; console.log(这个。$ el.height())&#34;它正确传递。和console.log(此。$ el.attr(&#34; id&#34;))在上面的代码中正确打印出来。然而,&#34; .each&#34;中的console.log声明没有打印出来,表明&#34; .each&#34;存在问题。我看了this question并尝试了下划线&#34; _。每个&#34;方法,但无法弄清楚如何迭代具有给定类(即div.set_equal_height)而不是给定数组的元素。任何人都可以启发我在上面的Backbone View中制作.each工作吗?请!
仅供参考,以下功能单独使用(我希望将其作为Backbone视图或视图助手合并):
function setEqualHeight(columns) {
var tallestcolumn = 0;
columns.each(function() {
currentHeight = $(this).height();
if(currentHeight > tallestcolumn) {
tallestcolumn = currentHeight;
}
});
columns.height(tallestcolumn);
}
$(document).ready(function() {
setEqualHeight($("div.set_equal_height"));
});
答案 0 :(得分:2)
我假设你用这样的东西实例化你的观点?
new SetEqualHeight({el: '.container')
如果是这样,这意味着$el
将被设置为视图中的容器div。 $(anything).each
会迭代“anything
”的所有成员......但在您的情况下,只有一个成员('.container'
)。
解决方案是改变这一行:
this.$el.each(function() {
为:
this.$el.find('.set_equal_height').each(function() {
或更好(更多Backbone-y):
this.$('.set_equal_height').each(function() {
希望有所帮助。