我正在使用Backbone.js作为框架,在我看来,我有一些小图片(垃圾桶可以删除,图标等)。当视图重新渲染这些图像时会闪现。
我通过为我不想闪现的所有内容创建一个新视图来解决这个问题,而不是触发它们渲染。但我想知道是否有另一种方法可以做到这一点而不会将我的观点分解成一堆碎片?
这是我在以下方式呈现我的观点的一般格式:
window.SomeView = Backbone.View.extend({
initialize: function() {
this.model.bind('change', this.render, this);
this.template = _.template($('#view-template').html());
},
render: function(){
var renderedContent = this.template(this.model.toJSON());
$(this.el).html(renderedContent);
return this;
},
events: { 'click .delete' : delete },
delete: function(ev){
//do delete stuff here
},
});
然后我将它们附加到div:
var newView = new PopupItemImgView({model: someModel});
$('#styleimage').append(newView.render().el);
我的模板可能看起来像
<script type="text/template" id="view-template">
<%
print('Content content - <img src="images/delete.gif" class="delete">');
%>
</script>
答案 0 :(得分:1)
您可以将change
绑定到render
函数,而不是将change
事件绑定到onChange
方法。然后,在onChange
处理程序中,您可以确切地确定需要更新的内容,并保留其他所有内容。
当我为集合构建视图时,我使用了这种方法:当单个元素发生更改时,我不希望整个列表重新呈现。相反,我在首次插入元素时渲染一次,然后根据需要处理特定的更改事件。