Javascript 在Meteor中的大多数模板中都需要呈现相同的jQuery,我应该遵循DRY吗?
下面是我在meteor中template.name.rendered中使用的重复代码,我还有更多像highcharts.js这样的库要包含,我觉得它不干燥,我应该遵循干燥吗?或者其他解决方案Javascript 在Meteor中的大多数模板中都需要呈现相同的jQuery,我应该遵循DRY吗?,javascript,jquery,meteor,highcharts,meteor-blaze,Javascript,Jquery,Meteor,Highcharts,Meteor Blaze,下面是我在meteor中template.name.rendered中使用的重复代码,我还有更多像highcharts.js这样的库要包含,我觉得它不干燥,我应该遵循干燥吗?或者其他解决方案 Template.foo.rendered = function() { Session.setDefault('highcharts', false); if (Session.get('highcharts') === false){ if (Roles.userIsInRole(Meteor
Template.foo.rendered = function() {
Session.setDefault('highcharts', false);
if (Session.get('highcharts') === false){
if (Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false) {
$.getScript('/javascripts/highcharts.min.js', function(){
Session.set('highcharts', true);
);
}
}
}
};
Template.fooBar.rendered = function() {
Session.setDefault('highcharts', false);
if (Session.get('highcharts') === false) {
if(Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false){
$.getScript('/javascripts/highcharts.min.js', function(){
Session.set('highcharts', true);
);
}
}
}
};
其中一种方法是将这两个模板都包含在版面中,并将此代码包含在版面中(假设您使用的是iron router)。您只需提供一个命名函数来消除重复。这可能会使您的代码看起来像:
var innerFunction = function() {
Session.setDefault('highcharts', false);
if (Session.get('highcharts') === false){
if (Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false) {
$.getScript('/javascripts/highcharts.min.js', function(){
Session.set('highcharts', true);
);
}
}
}
};
Template.foo.rendered = innerFunction;
Template.fooBar.rendered = innerFunction;
您可以创建一个新文件,在其中可以移动重复的代码行并使其成为函数。你可以这样做 function.js
this.highChart = function(_default){
if (!_default) { // equal to if(_default === false)
if(Roles.userIsInRole(Meteor.user(), 'admin') === true && highcharts === false){
$.getScript('/javascripts/highcharts.min.js', function(){
Session.set('highcharts', true);
);
}
}
}
}
从渲染函数中,可以执行以下操作:
Template.foo.rendered = function() {
Session.setDefault('highcharts', false);
highChart(Session.get('highcharts'));
};
Template.fooBar.rendered = function() {
Session.setDefault('highcharts', false);
highChart(Session.get('highcharts'));
};
我尝试了这种方法,在每个模板上的渲染似乎只起作用。