Backbone.js 从集合中获取元素的正确方法是什么
在我看来,我正在从我的收藏中获得模型Backbone.js 从集合中获取元素的正确方法是什么,backbone.js,backbone-views,backbone-events,Backbone.js,Backbone Views,Backbone Events,在我看来,我正在从我的收藏中获得模型 initialize:function(){ this.collection = new collection(student); this.render(); }, 从这个集合中,我使用过滤方法过滤高价值模型:(单击我触发) 以下是我的单一观点: var studentView = Backbone.View.extend({ tagName:'li', events:{ 'click':"called"
initialize:function(){
this.collection = new collection(student);
this.render();
},
从这个集合中,我使用过滤方法过滤高价值模型:(单击我触发)
以下是我的单一观点:
var studentView = Backbone.View.extend({
tagName:'li',
events:{
'click':"called"
},
template:_.template($("#studentTemplate").html()),
render:function(){
this.$el.append(this.template(this.model.toJSON()));
return this;
},
called:function(){
if(this.model.get('scored') > 60){
this.$el.css({
background:"#EFEFEF"
})
}else{
this.$el.css({
background:"#FCBABA"
})
}
},
showMe:function(){ // I am passing here to add a class name
console.log(this) // make the array... here
this.$el.css({ // but this is not getting the dom element...
border:'1px solid red'
})
}
});
如何向每个li
元素添加类名?这里有什么问题,任何人都可以帮我排序,或者给我一个正确的方法来过滤集合并将类名应用于它的元素
首先,对于主干和下划线,您通常不希望在集合上调用下划线方法,例如:
_.filter(this.collection.models, function(item){
相反,您希望调用主干集合等效方法():
第二,你把“分数”拼错为“分数”;不想成为一个混蛋,只是指出它,因为这样的拼写错误很容易导致错误
第三,视图的模型参数需要一个模型,但是您的getHighSocre
方法返回一个过滤器的结果,即一个模型数组,因此此行:
new studentView({model:this.getHighSocre()});
这是行不通的。如果您只想要分数高于60的第一个模型,请尝试使用find
而不是filter
,如果您确实希望视图中的每个模型的分数都高于60,那么您可能希望将这些模型转换为新的集合,并将其作为视图的集合(而不是作为其模型)传递
附言
这并不是答案的一部分,只是一个注释;如果您不熟悉Javascript的三元运算符,您可能希望查看它,因为它可以减少所有这些:
if(this.model.get('scored') > 60){
this.$el.css({
background:"#EFEFEF"
})
}else{
this.$el.css({
background:"#FCBABA"
})
}
只是:
var isAbove60 = this.model.get('scored') > 60;
this.$el.css('backgroundColor', isAbove60 ? "#EFEFEF" : "#FCBABA");
Ulugbek Komilovich-为什么要删除JSFIDLE?在调用showMe函数之前没有调用render in/我很抱歉没有进行正确的更改,我确实及时进行了更改您正在进行更改Scott Puleo-我有点困惑,您能看看我的JSFIDLE文件吗。。
if(this.model.get('scored') > 60){
this.$el.css({
background:"#EFEFEF"
})
}else{
this.$el.css({
background:"#FCBABA"
})
}
var isAbove60 = this.model.get('scored') > 60;
this.$el.css('backgroundColor', isAbove60 ? "#EFEFEF" : "#FCBABA");