2014-01-11 66 views
0

我正在重寫一些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搜索,但沒有找到任何修復。

回答

2

你的代碼有點困惑。你打電話App.HCS.redrawHCS有兩個參數:

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

redrawHCS只看一次的說法:

redrawHCS: function(elements) { 

然後嘗試用each遍歷elements

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

但將jQuery的each和調用回調函數爲:

function(index, dom_element) 

所以value將是一個DOM元素,borderundefined,並且所述第二參數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結構才能給你一個。我猜想它在each函數裏看起來像redrawHCS(this.$el.find('.score'))border = $(value).closest('.user-card-avatar-round'),但這是非常推測的。