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");