让流星重新渲染“;新文档”;

Getting meteor to re-render a route for "new document"

本文关键字:文档 新文档 新渲染 流星      更新时间:2023-09-26

我有一个新文档的路由"/new/"。我有一个去那里的按钮和看起来像的事件代码

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

这起了作用,但我不想流星重新加载页面,这就是发生的事情。相反,我只想渲染路线。所以我尝试了这个

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

现在什么都没发生。即使我在另一条使用相同顶级模板的路由上,也只会更改URL,但实际上并没有重新呈现路由。

我试着用Tracker修复这个问题。依赖

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()});
  },
});

它应该将URL设置为类似/new/#3243543623432的东西,但它没有设置哈希,即使文档说它应该这样做。

我应该怎么做才能让流星/铁路由器重新渲染?

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

路由器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()});
   },
});