【发布时间】: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