如何在视图元素上指定不同的类名

时间:2013-02-07 05:06:34

标签: backbone.js backbone-views

在我的Backbone视图中,我正在设置tagname,classname,temp value ..除了classname之外,所有这些都正常工作..

我如何设置classname ..或者我的代码有什么错误..

define(["singleton","listCollection","listModel"],function(singleton,collection,listModel){
    singleton.view = Backbone.View.extend({
        tagName     :'article',
        className   :'indBoard',
        projectName : true,
        template0   : _.template($('#listTemplate').html()),
        template1   : _.template($('#boardTemplate').html()),
        initialize  :function(options){
            this.template = this['template'+options.tempNo];
            this.tagName = options.tagName;
                    //i am changing to 'li' works
            this.className = options.cName; 
                    //changing to new class name not working
            console.log(options.cName);//consoles new class name properly
                  this.projectName = options.subTempNo == 0 ?true:false;                 
                   //condition as well works..
        },
        render:function(){
            var temp = this.template;
            this.$el.html(temp(this.model.toJSON()));
            return this;
        }
    });
    return singleton.view;
});

1 个答案:

答案 0 :(得分:4)

如果您在创建视图实例而不是options.className时设置了options.cName,则无需尝试在initialize中设置它(对于tagName也是如此)。< / p>

尝试这样的事情:

var view = new singleton.view({className: 'someClass'});

className是Backbone在视图创建过程中寻找的特殊选项之一。

来自Backbone source

// List of view options to be merged as properties.
var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];

实际上,我认为tagName对您有用的原因是因为它被Backbone合并,而不是因为您在initialize中进行了设置。