我对图片库Galleria.js和骨干有一个奇怪的问题。
此视图有时会隐藏,然后使用其他模型重新渲染。发生的事情是,重新渲染2或3次后,浏览器的CPU使用率达到100%。我确认Galleria
是导致这种情况的原因,因为我从视图中删除了它并且CPU正常。
我在想,我可能需要在隐藏时摧毁视图?不完全确定如何处理这个问题。
App.HouseDetailView = Backbone.View.extend({
el: '.house-details-area',
initialize: function() {
this.template = _.template($('#house-details-template').html());
App.Events.on('show_house', this.render, this);
App.Events.on('show_main_view', this.hide, this);
},
events: {
'click .btn-close': 'hide',
'shown a[data-toggle="tab"][href=".detail-map"]' : 'show_map',
'shown a[data-toggle="tab"][href=".detail-street-view"]' : 'show_street_view',
'change .calculate-price': 'calculate_price',
},
render: function(model) {
this.model = model;
var html = this.template({model:model.toJSON()});
$(this.el).html(html);
Galleria.loadTheme('/static/js/libs/galleria.classic.min.js');
Galleria.run('#galleria', {wait: true});
$(this.el).show();
return this;
},
hide: function() {
$(this.el).hide();
App.detailsRouter.navigate('/', true);
},
show_map: function() {
// check if map already rendered
if (this.$('.detail-map').html() === '') {
var map = new App.DetailMapView({model:this.model});
this.$('.detail-map').html(map.el);
map.refresh();
}
},
show_street_view: function() {
if (this.$('.detail-street-view').html() === '') {
var street_view = new App.DetailStreetView({model:this.model});
this.$('.detail-street-view').append(street_view.el);
street_view.render();
}
},
calculate_price: function (e) {
var price_element = this.$('.price');
var total_price = parseFloat(price_element.attr('data-total-price'));
var people = parseFloat(price_element.attr('data-people'));
// if selected is 1st option: Total price
if (e.srcElement.selectedIndex === 0) {
// show total price
price_element.html('$' + total_price.toFixed(2));
} else {
// show per person price
price_element.html('$' + (total_price/people).toFixed(2));
}
},
});
答案 0 :(得分:1)
我可以通过从视图Galleria.loadTheme('/static/js/libs/galleria.classic.min.js');
方法中移除render()
来解决此问题。
我只在App初始化时加载Galleria主题。