Backbone $ el bug

时间:2014-01-11 22:52:29

标签: javascript jquery backbone.js

我正在重写一些Backbone代码并且遇到了一个奇怪的错误。这是我的代码:

App.Views.ExploreCard.user = App.Views.ExploreCard.Parent.extend({
  name: 'user',
  allowUntyped: true,
  classes: 'explore-person-box shadowed',
  onclick: function() {
    window.location.assign(this.data.profilePath);
  },
  postRender: function() {
    App.HCS.redrawHCS(this.$el.find('.score'), this.$el.find('.user-card-avatar-round'));
  }
});

App.HCS = {
  redrawHCS: function(elements) {
    elements.each(function(index, value, border) {
      var score = $(value).html();
      console.log(value);
      console.log(border);
      if ( score <= 33 && score >= 1 ) {
        $(value).css("background-color", "#ff4013");
        $(border).css("border", "3px solid #ff4013;");
      }
      else if ( score <= 66 && score >= 34 ) {
        $(value).css("background-color", "rgb(92, 154, 0)");
        $(border).css("border", "3px solid rgb(92, 154, 0)");
      }
       else if ( score <= 99 && score >= 67 ) {
        $(value).css("background-color", "#fb9f00");
        $(border).css("border", "3px solid #fb9f00;");
      }
    });
  }
};

当我执行console.log值和边框时,我总是未定义边框。我有一个完整性检查切换了这一行中的参数:

从:

App.HCS.redrawHCS(this.$el.find('.score'), this.$el.find('.user-card-avatar-round')); 

为:

App.HCS.redrawHCS(this.$el.find('.user-card-avatar-round'), this.$el.find('.score'));

并且无论顺序如何,第二个参数边界始终是未定义的。

我在Backbone $el上进行了一些Google搜索,但没有找到任何修复。

1 个答案:

答案 0 :(得分:2)

你的代码有点困惑。你用两个参数调用App.HCS.redrawHCS

App.HCS.redrawHCS(this.$el.find('.score'), this.$el.find('.user-card-avatar-round'));

redrawHCS只查看一次参数:

redrawHCS: function(elements) {

然后,您尝试使用elements迭代each

elements.each(function(index, value, border) {

但这将是jQuery的each,并将回调函数调用为:

function(index, dom_element)

所以value将是一个DOM元素,border将是undefinedredrawHCS的第二个参数将被完全忽略。

如果.user-card-avatar-round应该是值border的{​​{1}},那么您需要更像这样的内容:

.score

我很确定有更好的方法可以解决这个问题,但我需要知道DOM结构才能给你一个。我猜它在redrawHCS: function(values, borders) { var i, value, border; for(i = 0; i < values.length; ++i) { value = values[i]; border = borders[i]; //... } } 函数中看起来像redrawHCS(this.$el.find('.score'))border = $(value).closest('.user-card-avatar-round'),但这非常具有推测性。