Несколько подпредставлений одного и того же класса в Ampersand.js
Я пытаюсь добавить несколько подпредставлений к моему представлению в Ampersand.js, где подпредставления одного типа. Тем не менее, Ampersand, кажется, только позволяет мне иметь один объект типа класса, и объявление второго заменяет все атрибуты первого. Например:
var chart1 = new PieChart('userChart');
var chart2 = new PieChart('deviceChart');
module.exports = PageView.extend({
pageTitle: 'Home',
template: require('../../../templates/pages/home.hbs'),
render: function() {
this.renderWithTemplate();
this.renderSubview(chart1, document.getElementById('userChart'));
this.renderSubview(chart2, document.getElementById('deviceChart'));
}
});
Будет отображаться только второй график, однако первый график будет отображаться нормально, если я закомментирую второй. После осмотра объектов оба имеют 'deviceChart'
в качестве параметров. Я попытался сделать совершенно новый класс под названием PieChart2
и это устраняет проблему, но создание совершенно нового класса для каждого типа диаграмм, которые я хочу показать, было бы нелепым.
Есть идеи?
1 ответ
Я думаю, что у вас есть проблемы с вашей PieChart где-то. Я попытался воспроизвести вашу проблему, и все работало нормально и как ожидалось. Вот мой рабочий код:
var OneView = View.extend({//analogous to your PieChart
template: '<b></b>',
props: {
type: 'string'
},
bindings: {
'type': 'b'
},
initialize: function(type){
this.type = type;
}
});
var view1 = new OneView('view1');
var view2 = new OneView('view2');
module.exports = View.extend({
template: '<div><div id="view1"></div><div id="view2"></div></div>',
autoRender: true,
render: function(){
this.renderWithTemplate(this);
this.renderSubview(view1, document.getElementById('view1'));
this.renderSubview(view2, document.getElementById('view2'));
return this;
}
});
Кстати, вы должны создавать свои взгляды внутри render
функция. В противном случае они будут одинаковыми каждый раз, когда вы звоните render()
(из-за того, как работают модули CommonJS), и, скорее всего, это не то, что вы хотите. Кроме того, для запроса элементов внутри вашего представления, вы можете использовать this.querySelector('SELECTOR')
вместо document.getElementById
,