Backbone.View的样式属性

我试图设置<ul>元素的高度,宽度和背景图像。

以下是我的Backbone.View的内容:

var RackView = Backbone.View.extend({

    tagName: 'ul',

    className: 'rack unselectable',

    template: _.template($('#RackTemplate').html()),

    render: function () {
        this.$el.html(this.template(this.model.toJSON()));
        return this;
    },

    attributes: function () {
        var isFront = this.model.get('isFront');
        var imageUrlIndex = isFront ? 0 : 1;

        return {
            'background-image': 'url(' + this.model.get('imageUrls')[imageUrlIndex] + ')',
            'height': this.model.get('rows') + 'px',
            'width': this.model.get('width') + 'px'
        };
    }
}

这不起作用,因为属性没有写入元素的'style'属性。 相反,他们被视为属性......这是有道理的,因为函数的名称,但它让我想知道 - 我该如何实现这样的正确?

图像,高度和宽度在设置后是不可变的,如果这有助于简化...

我只是以一种风格包装我的回归? 这似乎过分令人费解......

这里是生成的HTML:

<ul background-image="url(data:image/png;base64,...)" height="840px" width="240px" class="rack unselectable">
</ul>

编辑:这工作,但我没有引发:

attributes: function () {

    var isFront = this.model.get('isFront');
    var imageUrlIndex = isFront ? 0 : 1;

    var backgroundImageStyleProperty = "background-image: url(" + this.model.get('imageUrls')[imageUrlIndex] + ");";
    var heightStyleProperty = "height: " + this.model.get('rows') + 'px;';
    var widthStyleProperty = "width: " + this.model.get('width') + 'px;';

    return {
        'style': backgroundImageStyleProperty + ' ' + heightStyleProperty + ' ' + widthStyleProperty
    };
},

你可以在render函数中使用jQuery的css函数:

render: function () {
    this.$el.html(this.template(this.model.toJSON()));
    var backgroundImageStyleProperty = "background-image: url(" + this.model.get('imageUrls')[imageUrlIndex] + ");";
    var heightStyleProperty = "height: " + this.model.get('rows') + 'px;';
    var widthStyleProperty = "width: " + this.model.get('width') + 'px;';

    this.$el.css({
     'height'          : heightStyleProperty,
     'width'           : widthStyleProperty,
     'background-image': backgroundImageStyleProperty
    });

    return this;
},

在Marionette中,在你看来,你可以打电话给:

onRender: function () {
  this.$('yourElement').css('whatever', 'css');
},

做到这一点的唯一方法是使用问题中所述的style属性传递属性。 在骨干中,属性映射通过以下代码直接传递给jQuery:

var $el = Backbone.$('<' + _.result(this, 'tagName') + '>').attr(attrs);

因此,无法将样式作为Javascript对象传递。

链接地址: http://www.djcxy.com/p/73873.html

上一篇: style properties of a Backbone.View

下一篇: pipe output from interactive command to less