В момента ето как изглежда моят рутер:
Router.map(function(){
this.route('Home',{
path:'/',
template:'home',
waitOn: function(){
},
data: function(){
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
return {
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
hasBirthDetails: hasBirthDetails
};
}
})
this.route('Settings', {
path: '/settings',
template: 'settings',
waitOn: function(){
console.log('settings waitOn');
//return Meteor.subscribe("userData");
},
data: function(){
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
return {
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
hasBirthDetails: hasBirthDetails
};
}
});
this.route('Charts', {
path:'/charts/:chart',
template: 'charts',
data: function(){
Session.set("chartToDraw", this.params.chart);
var birthInfo = Session.get('data');
console.log('chart chart chart');
console.log('inside Charts this.params.chart ' + this.params.chart);
console.log('birthInfo');
console.log(birthInfo);
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
return {
div: this.params.chart,
birthInfo: birthInfo,
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
hasBirthDetails: hasBirthDetails
};
}
});
this.route('Factors', {
path:'/factors/:factor',
template: 'factors',
data: function(){
console.log('data of factors');
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
var factorToDisplay = this.params.factor;
console.log(factorToDisplay);
var factorData = Session.get(factorToDisplay);
console.log(factorData);
var hasFactorData;
if(typeof factorData === 'undefined'){
}else{
hasFactorData = true;
}
return {
hasFactorData : hasFactorData,
factor: this.params.factor,
factorData : factorData,
hasBirthDetails: hasBirthDetails,
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
}
}
});
this.route('Data', {
path: '/data',
template: 'data',
waitOn: function(){
//return [Meteor.subscribe("name", argument);]
//return [Meteor.subscribe("birth_details")];
},
data: function(){
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
return {
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
hasBirthDetails: hasBirthDetails
};
}
});
});
Както можете да видите, има няколко повторения на кода, който е подобен на този:
if(Meteor.userId()){
var idOfOwner = Meteor.userId()
var count = BirthDetails.find({idOfOwner: idOfOwner}).count();
var hasBirthDetails;
if(count > 0){
hasBirthDetails = true;
}else{
hasBirthDetails = false;
}
}
return {
birthDetails: BirthDetails.find({
idOfOwner: idOfOwner,
}),
hasBirthDetails: hasBirthDetails
};
Как да избегна повтарянето на код в различни маршрути? В идеалния случай бих искал да го имам на едно място, което да може да се използва от много маршрути. По този начин не е необходимо да променям много различни места, ако реша да направя малки промени в повтарящия се код.... Как да направя това?
Причината, поради която не съм използвал RouteController, е, че за някои от маршрутите ще трябва да добавя още данни, които да бъдат върнати във функцията за данни на рутера.....но може би просто не знам как да използвам RouteController е за решаване на този вид проблем....
Как да изчистя кода по-горе?