请解释 Meteor 的 Iron Router DATA 和 Subscribe/publish 渲染
Please explain Meteor's Iron Router DATA and Subscribe/publish rendering
我对缺少有关 Iron Router 和 Collections/publish/subscribe 的文档感到沮丧。我有一些 Publish 语句(在站点代码的 isServer 部分),return 数据从 Collections 到客户端。我在这样的路线中称呼他们:
Router.route('/project/:_id', {
path: '/project/:_id',
template: 'project',
waitOn: function(){
return Meteor.subscribe( "getProject", this.params._id );
}
此时,我有一个服务器能够将已发布的数据集发送到客户端。我有一个客户要求订阅该数据集。这应该是我需要的功能页面,对吧?但是,当我不包含数据时,Iron Router 向我咆哮:路由中的这样的字段:
data: function() {
return Projects.find();
}
为什么我需要数据:如果我应该已经在 Meteor.subscribe 上拥有我想要的数据?有人可以解释为什么这是必要的吗?我不想要模板中的 Projects.find() 结果,我想要 Meteor.subscribe("getProject") 的结果。试图在数据中调用 getProject: 部分,但它想要一个集合而不是 publish/subscription.
这令人沮丧,因为这似乎是最基本的任务:呈现页面并使用服务器提供的结果集。我还想念更多的东西吗?基本 LAMP 可以很容易地呈现数据。
是的,您仍然需要在需要从中获取数据的任何集合上调用 find。订阅只是让那些通常只存在于服务器端的数据在客户端可用。订阅会为特定用户提取您需要的内容。例如,您不想要所有项目,您只想要属于当前用户的项目。
如果安装了自动发布包,则不需要订阅,因为 all 客户端将拥有 all 数据;没有它,你只需要指定你需要的。
关于这段代码。
waitOn: function(){
return Meteor.subscribe( "getProject", this.params._id );
}
顾名思义,您正在等待客户,获取 "data ready" 又名订阅。
关于其他词 "template data" 上的 data:function()
字段,让我们举个例子。
假设您有这个模板。
<template name="projects">
<h2>A List Of Projects</h2>
<!-- here you want to show something like {{projectName}}. -->
</template>
所以您需要将数据传递到模板中吗?
因此您可以将数据作为 function
或 object
传递
你可以通过
data:function(){
return Projects.find() //for example
}
或
data:{
projects:[{
title:"example"
},
{
title:"example2"
}
]
}
您还需要知道,如果您将数据用作函数,则不需要模板上的 {{#each}} 助手,但如果您将其用作对象,则需要执行以下操作
{{#each projects}}
{{title}}
{{/each}}
或者你可以省略铁路由器上的数据并创建你自己的助手
Template.example.helpers({
projects:function(){
return Projects.find(); //this will do the same as data:function(){} iron router method
}
})
希望你能明白
我对缺少有关 Iron Router 和 Collections/publish/subscribe 的文档感到沮丧。我有一些 Publish 语句(在站点代码的 isServer 部分),return 数据从 Collections 到客户端。我在这样的路线中称呼他们:
Router.route('/project/:_id', {
path: '/project/:_id',
template: 'project',
waitOn: function(){
return Meteor.subscribe( "getProject", this.params._id );
}
此时,我有一个服务器能够将已发布的数据集发送到客户端。我有一个客户要求订阅该数据集。这应该是我需要的功能页面,对吧?但是,当我不包含数据时,Iron Router 向我咆哮:路由中的这样的字段:
data: function() {
return Projects.find();
}
为什么我需要数据:如果我应该已经在 Meteor.subscribe 上拥有我想要的数据?有人可以解释为什么这是必要的吗?我不想要模板中的 Projects.find() 结果,我想要 Meteor.subscribe("getProject") 的结果。试图在数据中调用 getProject: 部分,但它想要一个集合而不是 publish/subscription.
这令人沮丧,因为这似乎是最基本的任务:呈现页面并使用服务器提供的结果集。我还想念更多的东西吗?基本 LAMP 可以很容易地呈现数据。
是的,您仍然需要在需要从中获取数据的任何集合上调用 find。订阅只是让那些通常只存在于服务器端的数据在客户端可用。订阅会为特定用户提取您需要的内容。例如,您不想要所有项目,您只想要属于当前用户的项目。
如果安装了自动发布包,则不需要订阅,因为 all 客户端将拥有 all 数据;没有它,你只需要指定你需要的。
关于这段代码。
waitOn: function(){
return Meteor.subscribe( "getProject", this.params._id );
}
顾名思义,您正在等待客户,获取 "data ready" 又名订阅。
关于其他词 "template data" 上的 data:function()
字段,让我们举个例子。
假设您有这个模板。
<template name="projects">
<h2>A List Of Projects</h2>
<!-- here you want to show something like {{projectName}}. -->
</template>
所以您需要将数据传递到模板中吗?
因此您可以将数据作为 function
或 object
你可以通过
data:function(){
return Projects.find() //for example
}
或
data:{
projects:[{
title:"example"
},
{
title:"example2"
}
]
}
您还需要知道,如果您将数据用作函数,则不需要模板上的 {{#each}} 助手,但如果您将其用作对象,则需要执行以下操作
{{#each projects}}
{{title}}
{{/each}}
或者你可以省略铁路由器上的数据并创建你自己的助手
Template.example.helpers({
projects:function(){
return Projects.find(); //this will do the same as data:function(){} iron router method
}
})
希望你能明白