让meteor重新渲染“新文档”的路径

时间:2015-11-30 10:19:31

标签: javascript meteor iron-router

我有一条新文件的路线“/ new /”。我有一个按钮去那里,事件代码看起来像

Template.form.events({
  "click #new": function() {
     window.location.href = "/new/";
  },
});

这有效但我不希望meteor重新加载页面,这就是发生的事情。相反,我想只是渲染路线。所以我尝试了这个

Template.form.events({
  "click #new": function() {
     Router.go("/new/");
  },
});

现在绝对没有任何反应。即使我在使用相同顶级模板的另一条路线上,所有发生的事情都是URL已更改,但路线实际上并未重新渲染。

我尝试使用Tracker.Dependency修复此问题

var someDummyDep = new Tracker.Dependency; // also tried Deps.Dependency();

Template.form.onCreated = function() {
  var instance = this;
  instance.autorun(function() {
    someDummyDep.depend();
  });
});

Template.form.events({
  "click #new": function() {
     someDummyDep.changed();
     Router.go("/new/");
  },
});

我不确定如何使模板依赖,但由于我有其他模板使用onCreated函数使用反应性的东西,我认为这可能有效。它并没有改变。没有任何事情发生,没有任何东西可以重新渲染。

实际路线看起来像这样

Router.route('/new/', function() {
  this.render('form');
});

我尝试将路线更改为此

Router.route('/new/', {
  action: function() {
    this.render('form');
  },
  data: function() {
    someDummyDep.depend();
  },
});

和这个

Router.route('/new/', {
  action: function() {
    this.render('form');
  },
  data: function() {
    someDummyDep.depend();
    return Math.random();  // ?? maybe if the data changes?
  },
});

我也试过这个

Template.form.events({
  "click #new": function() {
     someDummyDep.changed();
     Router.go("/new/", {}, {hash: Math.random().toString()});
  },
});

哪个应该将网址设置为/new/#3243543623432,但即使文档说它应该也不会设置哈希值。

如何让meteor / iron-router重新渲染?

1 个答案:

答案 0 :(得分:0)

解决您的第一个问题,为您的路线命名并调用它,这不会重新加载页面

路由器Js

Router.route('/new/', function() {
  this.render('form');
},{
  name:'new'
);

<强> JS

Template.form.events({
  "click #new": function() {
     Router.go('new')
  },
});

如果你想传递一些id或其他任何东西

路由器Js

Router.route('/new/:something', function() {
  this.render('form');
},{
  name:'new'
);

<强> JS

Template.form.events({
  "click #new": function() {
     Router.go('new',{something:123})
  },
});

或只是一些哈希

Router.route('/new', function() {
  this.render('form');
},{
  name:'new'
);

Template.form.events({
   "click #new": function() {
      Router.go('new',{},{hash: Math.random().toString()});
   },
});