Javascript 在Meteor中的大多数模板中都需要呈现相同的jQuery,我应该遵循DRY吗?

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

下面是我在meteor中template.name.rendered中使用的重复代码,我还有更多像highcharts.js这样的库要包含,我觉得它不干燥,我应该遵循干燥吗?或者其他解决方案

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'));
};

我尝试了这种方法,在每个模板上的渲染似乎只起作用。