【问题标题】:Iron Router routing entry data retrieval function run twiceIron Router路由条目数据检索功能运行两次
【发布时间】:2016-05-27 01:23:33
【问题描述】:

我是 Meteor 的新手(以及就此而言的全栈 JS 开发),并且尝试了一些尝试转换我目前在 Django/Python 中在 Google App Engine 上运行的应用程序。

我有以下使用Iron Router 的路由条目:

this.route("editFacility", {
  path: "/facilities/:_id/edit",
  template: "editFacility",
  data: function() {
    return Facilities.findOne({ _id: this.params._id });
  }
});

... 和以下模板(使用 autoform 的 quickform):

<template name="editFacility">
  <h2>Edit facility "{{description}}"</h2>
  <div class="row">
    <div class="col-md-12">
      {{> quickForm
        collection="Facilities"
        omitFields="createdAt, updatedAt"
        doc=this
        id="updateFacilityForm"
        type="update"
        template="bootstrap3-horizontal"
        label-class="col-sm-2"
        input-col-class="col-sm-6"}}
    </div>
  </div>
</template>

路由被触发:

{{#linkTo route='editFacility' _id=this._id class="btn btn-default btn-xs"}}Edit{{/linkTo}}

最初看起来表单没有填充数据,但在路由的data: 函数中添加debugger 语句表明该函数实际上运行了两次。第一次找到文档并正确填写表格,然后第二次查找失败,从而清除表格。堆栈没有透露任何细节,两次运行看起来都一样:

我搜索了这个问题并找到了一些参考资料,但没有一个明确的解决方案。我已将 meteor 和我所有的软件包更新为最新和最好的,但这个问题仍然存在。

所以我的问题是,是什么导致meteor / Iron Router 执行此路由条目两次?

【问题讨论】:

  • 请阅读有关流星反应性的信息。 findOne 调用是响应式的,因此当集合中的数据发生更改时,它会重新运行。不知道为什么数据会在集合中消失(通常是相反的情况,先为空然后不为空),但这听起来绝对像是一种反应式的重新运行。
  • 是的,通常情况相反。您是否拥有填充表单数据的正确订阅?
  • @ChristianFritz 我读过关于反应性的文章。除了第一次成功找到文档(如果这符合“更改”条件)之外,集合中没有数据更改。具有相同上下文和文档 ID 的第二个查找失败并清除了表单。我很困惑……
  • @FaysalAhmed 我在原型模式下运行这个应用程序,所以安装了不安全的包。我的印象是,在删除不安全的软件包之前,我不需要订阅。
  • autopublish 确保订阅。顺便说一句,问题还没有解决吗?如果没有,您可以在流星爱好者聊天群中分享更多 sn-p。

标签: meteor iron-router


【解决方案1】:

您的包裹列表中似乎缺少包裹 autopublish。它负责发布服务器中可用的所有数据。否则,您需要编写一个发布,然后在客户端重新订阅它。

【讨论】:

    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多