【问题标题】:MeteorJS iron-router "sub-templates" or re-render prevention or optional parameterMeteorJS 铁路由器“子模板”或重新渲染预防或可选参数
【发布时间】:2015-04-30 13:16:47
【问题描述】:

我正在尝试将一个包含许多已弃用软件包的两年前的流星项目迁移到当前版本。但我被铁路由器困住了:

  1. 路线 /map 显示带有标记的交互式地图
  2. 当用户点击一个标记时,一个绝对定位的div 全宽高度打开并显示详细信息页面
  3. 网址应更改为/map/<markerId>,以便用户可以分享网址并使用返回按钮
  4. 保存地图的 div 不应被销毁或重新渲染,因为用户在返回时不应像缩放和滚动那样失去其“地图状态”

我尝试了几种方法,但没有找到同时解决第 3 点和第 4 点的解决方案。 使用旧的路由器包,它只使用两条路由设置不同的 Session 变量并呈现相同的模板。

提前感谢您的想法

【问题讨论】:

  • 我相信你应该能够将渲染交给一个元素。因此,当您导航到路线时,路线的action: 将调用.render,从而产生您想要的区域。

标签: javascript meteor iron-router


【解决方案1】:

您可以尝试将 to 参数用于 Iron Router 的 render 函数:

this.render('markerdetails', { to: 'yieldname' });

要使用它,您需要在包含地图的模板中指定产量:

{{> yield "yieldname"}}

进一步阅读to参数:https://github.com/iron-meteor/iron-router/blob/devel/Guide.md#rendering-templates-into-regions-with-javascript

如果用户只是打开 URL,则不能 100% 确定会发生什么。您可能可以检查地图是否已经可见,如果没有先渲染地图,然后将标记放入产量中。

【讨论】:

    【解决方案2】:

    您可以尝试从 Iron Router 切换到 Meteorhacks 的 Flow-Router,因为它在路由和渲染之间有更好的分离,并且渲染不是反应式的。事实上,Flow-Router 根本不处理自己的渲染。相反,如果您愿意,您可以使用 MeteorHacks 的 Flow-Layout 或其他东西。这是Arunoda's article

    这是一个非常基本的流路由器和布局的例子。 它尝试尽可能少地渲染,或者如果您愿意,您可以看到如何只更改路线但根本不进行渲染......

    FlowRouter.route('/tasks', {
      subscriptions: function(){
        this.register('myTasks', Meteor.subscribe('tasks'))
      },
      action: function() {
        FlowLayout.render('layout1', { // the "layout" holds templates
          top: "header",
          main: "tasks" 
        });
      }
    });
    

    【讨论】:

    • Flow-Router 似乎像大多数 Arunodas 的东西一样有一个很好的连接。但我怀疑与其他社区包的兼容性问题。所以我想等到这些问题解决后再深入挖掘 Arunodas Flow-World。
    猜你喜欢
    • 2015-12-24
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2013-09-02
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多