使用.each在Backbone View中使用相同类的元素循环?

时间:2012-07-06 19:07:05

标签: javascript jquery backbone.js underscore.js

我正在使用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"));
});

1 个答案:

答案 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() {

希望有所帮助。