我有一个Meteor应用程序,我正在从IronRouter转换到FlowRouter。到目前为止一直很好,但有些方面我还不了解。
我的路线如下:
FlowRouter.route('/documents/:docId/edit', {
name: 'documentEdit',
subscriptions: function (params, queryParams) {
this.register('documentEdit', Meteor.subscribe('documentSingle', params.docId));
},
action: function (params, queryParams) {
BlazeLayout.render('layout', { top: 'header', main: 'documentEdit' });
},
});
第一个选项:
然后我还有一个模板:
<template name="documentEdit">
<div class="container">
<h1>Edit document</h1>
{{#if isReady 'documentEdit'}}
{{#autoForm collection="Documents" doc=this id="documentForm" type="update" meteormethod="documentUpdateMethod"}}
<fieldset>
{{> afQuickField name='title'}}
{{> afQuickField name='content' rows=6}}
</fieldset>
<button type="submit" class="btn btn-primary">Update</button>
<a class="btn btn-link" role="button" href="{{pathFor 'documentsList'}}">Back</a>
{{/autoForm}}
{{/if}}
</div>
</template>
使用模板助手,如下所示:
Template.documentEdit.helpers({
isReady: function(sub) {
if(sub) {
return FlowRouter.subsReady(sub);
} else {
return FlowRouter.subsReady();
}
}
});
这是提到的here,但是我没有在UI上的文本框中预先填充这些值(编辑字段时这是正常的)。
第二个选项:
当我执行以下操作时,它可以工作,我不明白为什么它有效(发现它在不同的论坛中浏览并尝试过):
<template name="documentEdit">
<div class="container">
<h1>Edit document</h1>
{{#with getDocument }}
{{#autoForm collection="Documents" doc=this id="documentForm" type="update" meteormethod="documentUpdateMethod"}}
<fieldset>
{{> afQuickField name='title'}}
{{> afQuickField name='content' rows=6}}
</fieldset>
<button type="submit" class="btn btn-primary">Update</button>
<a class="btn btn-link" role="button" href="{{pathFor 'documentsList'}}">Back</a>
{{/autoForm}}
{{/with}}
</div>
</template>
和帮手:
Template.documentEdit.helpers({
getDocument: function () {
return Documents.findOne();
}
});
所以问题是:
Document.findOne()
而不必传递我想要编辑的文档的ID:答案 0 :(得分:5)
您希望使用Flow Router进行模板级订阅,这是主要模式更改之一。
所以你要这样做:
在模板级别设置订阅。自动运行以便重新订阅路线更改。
objdump
设置模板帮助程序以从路径中获取,并获取id并填充帮助程序/文档。
<html>
<head>
<style>
div#title {
background-image: url("banner.png");
color:yellow;
height:120px;
width:100%;
}
</style>
</head>
<body>
<div id=title>
</div>
进行模板级加载检查,如果有渲染,否则显示加载...
Template.documentEdit.onCreated(function() {
var self = this;
this.autorun(function() {
var docId = FlowRouter.getParam('docId');
self.subscribe('documentSingle', docId));
};
};
答案 1 :(得分:0)
不知道这是如何工作的,看到我读过的所有教程都涉及更新使用的Iron路由器,我花了7天时间尝试重试,查看其他代码,阅读教程。快乐它现在有效。