javascript - Backbone.View的className允许动态赋值吗
PHPz
PHPz 2017-04-10 14:22:49
[JavaScript讨论组]

通常创建View时是这样:

A = Backbone.View.extend({
    el:'p',
    className:'class',
    ....
});

如果这个View的new操作用在循环中,而在使用View时想根据不同的class来显示,如何动态的给className赋值?

PHPz
PHPz

学习是最好的投资!

全部回复(5)
阿神
Backbone.View.extend({
    className: function() {
        return 'foobar';
    }
});
巴扎黑
for (var i=1; i < 5; i++) {
    a[i] = (function(i){
        return Backbone.View.extend({
            el:'p',
            className:i,
            ....
        });
    })(i)
}
阿神

视图在实例化时会调用 _ensureElement 方法

    _ensureElement: function() {
      if (!this.el) {
        var attrs = _.extend({}, _.result(this, 'attributes'));
        if (this.id) attrs.id = _.result(this, 'id');
        if (this.className) attrs['class'] = _.result(this, 'className');
        var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);
        this.setElement($el, false);
      } else {
        this.setElement(_.result(this, 'el'), false);
      }
    }

所以第一步需要定义 tagName 这里不能定义成字符串,必须定义为函数,函数可以这样写:

    tagName: function() {
        var prefix = "user customize css class prefix"
        return classPrefix + obj.model.get('id');
    }

第二步:因为不指定 el属性时才会调用 tagName,所以根据你的需求,el 不能指定
然后你只需要写不同的css类就可以了,我写的例子函数中,css类等于classPrefix + obj.model.get('id'),所以你可以根据自己的需求定义 tagName 方法就可以了

PHP中文网
new Backbone.View({className:'class'});
天蓬老师

看一下 View 的 attributes 吧。

http://backbonejs.org/#View-attributes

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号