我正在重写一些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搜索,但没有找到任何修复。
答案 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
将是undefined
,redrawHCS
的第二个参数将被完全忽略。
如果.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')
,但这非常具有推测性。