javascript - 使用 .each 在 Backbone View 中循环遍历具有相同类的元素?

标签 javascript jquery backbone.js underscore.js

我正在使用 Backbone 和 JQuery,并想创建一个指向 create equal height columns as described in method 2 of this link 的 Backbone View . 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;
});

我在单独的 Wire 规范中定义了“el”参数,如下所示:{ el: 'div.set_equal_height' },自从“console.log(this.$el.height() )"和上面代码中的 console.log(this.$el.attr("id")) 正确打印出来。但是“.each”语句里面的console.log没有打印出来,说明“.each”有问题。我看了this question并尝试了下划线“_.each”方法,但无法弄清楚如何迭代具有给定类(即 div.set_equal_height)而不是给定数组的元素。谁能启发我在上面的主干 View 中使 .each 工作?请!!!

仅供引用,以下函数可自行运行(我希望将其合并为主干 View 或 View 助手):

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"));
});

最佳答案

我假设您正在用这样的东西实例化您的 View ?

new SetEqualHeight({el: '.container')

如果是这样,这意味着 $el 将被设置为您 View 中的容器 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() {

希望对您有所帮助。

关于javascript - 使用 .each 在 Backbone View 中循环遍历具有相同类的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11368256/

相关文章:

javascript - 为什么用户必须单击两次才能启用 JQuery UI Slider 的键盘控制

javascript - 修改对象会导致修改反射(reflect)在先前推送到数组的该对象的副本中

javascript - 如何迭代所有文本框进行验证

javascript - 如何延迟 toggleClass 事件以防止垃圾邮件更改?

javascript - 具有绝对元素定位的所见即所得

javascript - Google reCaptcha v2 - 在提交表单之前检查验证码是否已完成

javascript - 在客户端测试 Javascript

javascript - 单页应用程序安全问题

javascript - Backbonejs 查看 self 模板replaceWith 和事件

javascript - 传递给initialize() View 的参数在Backbone.js中未定义