我正在重写一些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进行了一些谷歌搜索,但未找到任何修复方法。

最佳答案

您的代码有些混乱。您正在使用两个参数调用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将是undefined,并且redrawHCS的第二个参数将被完全忽略。

如果.user-card-avatar-round应该是值border.score,那么您需要更多类似的内容:

redrawHCS: function(values, borders) {
    var i, value, border;
    for(i = 0; i < values.length; ++i) {
        value  = values[i];
        border = borders[i];
        //...
    }
}


我很确定有更好的方法来解决此问题,但是我需要知道DOM结构才能给您一个。我猜想它看起来像redrawHCS(this.$el.find('.score'))以及border = $(value).closest('.user-card-avatar-round')函数中的each,但这很投机。

09-25 19:45