替换 iron 路由器上表示 space 的 %20

Replace the %20 that means a space on iron router

我正在尝试用另一个字符替换 url 上表示 space 的 %20,

Router.map(function () {
  this.route('promos', {
    path: '/:promo_name',
    waitOn: function(){
        return Meteor.subscribe("promo", this.params.promo_name);
    },
    data: function(){
      return Promociones.findOne({'metadata.nombrePromo': this.params.promo_name});
    }
  });
});

这就是我生成动态路由的方式,我得到了这样的结果 http://padonde.mx/Pi%C3%B1a%20Colada%202x1 我想将 %20 替换为另一个字符 -+, 这在 iron router 上可行吗?

我不知道有任何 Iron-Router 配置可以改变这一点,但您可以执行以下操作:

添加名为 Collection Helpers 的小包:

$ meteor add dburles:collection-helpers

然后在 Collection 中定义一个虚拟字段(例如:polished_promo_name):

Promociones.helpers({
  polished_promo_name: function() {
    return this.promo_name.replace(/ /g, "AnotherCharacter");
  }
});

当然现在使用 polished_promo_name 而不是 promo_name 并将空格替换回:

Router.map(function () {
  this.route('promos', {
    path: '/:polished_promo_name',
    waitOn: function(){
      return Meteor.subscribe("promo", this.params.polished_promo_name.replace(/AnotherCharacter/g, " "));
    },
    data: function(){
      return Promociones.findOne({'metadata.nombrePromo': this.params.polished_promo_name.replace(/AnotherCharacter/g, " ")});
    }
  });
});

这实际上是一个stander URL编码,它不是由浏览器设置的 铁路由器。

你可以做到,

你在哪里插入

'metadata.nombrePromo', add another field to the collection like

'metadata.nombrePromoReplace',然后执行此操作。 我猜你有类似

var nombrePromo = $('#idElementPromo').val();,或 session 或您将值传递给元数据的任何内容

所以基于那个 var nombrePromo 做这个。

var nombrePromoReplace = nombrePromo.replace(/\s+/g, '');

现在改变路线。

Router.map(function () {
  this.route('promos', {
    path: '/:promo_name',
    waitOn: function(){
        return Meteor.subscribe("promo", this.params.promo_name);
    },
    data: function(){
      return Promociones.findOne({'metadata.nombrePromoReplace': this.params.promo_name});
    }
  });
});

现在,当您导航到 /:promo_name 时,如果您添加了类似

的内容
i have blanks spaces

路线应该是

/ihaveblankspaces

应该可以。