use*_*596 6 render classname backbone.js
我有一个Backbone视图,其中className是使用函数动态设置的:
app.Views.ItemRequestView = Backbone.View.extend({
tagName : 'tr',
className : function(){
var classRow = '';
if(this.model.getState() == app.Models.Request.status.wait.key) {
classRow = app.Models.Request.status.wait.color + ' bolder';
}
else if(this.model.getState() == app.Models.Request.status.confirm.key){
classRow = app.Models.Request.status.confirm.color + ' bolder';
}
return classRow;
},
Run Code Online (Sandbox Code Playgroud)
当我更新视图模型时,我会触发一个渲染视图的更改事件.问题是className没有使用渲染重新计算...当我渲染视图时如何重新计算className?
有人有想法吗?谢谢
您必须class在render方法后手动更新.Backbone className在_ensureElement方法期间仅初始化View的元素一次:
_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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您看一下,它会检查元素是否已存在.无论如何,您可以在您的render方法中手动执行此操作:
render: function(){
//Your logic
this.$el.attr('class', _.result(this, 'className'));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4739 次 |
| 最近记录: |