通过 iron:router 显示操作,模板未从 collection.findOne 方法传递数据
Show Action via iron:router, template isn't passed data from a collection.findOne method
我无法获取模型实例的 'show' 页面来显示其数据。
这是不会显示其数据的模板:
<template name="priority">
<h1>Priority: {{title}}</h1>
</template>
它本身非常简单,但我无法显示 title。 Iron:router 使用以下代码将我们引导至此页面:
Router.route('/priority/:_id', function(){
var priority = this.params._id;
this.render('priority', {
data: function(priority){
Meteor.call('showPriority', priority, function(error){
if (error) {
console.log("An error has occured: " + error);
}
})
}
})
}, {
name: 'priority.show'
});
Meteor.method很简单,就是查询变量priority:
'showPriority': function(priority) {
return Priorities.findOne({_id: priority});
}
带href的视图在这里:
<template name="priorityList">
<ul class="table-view">
{{#each this}}
<li class="table-view-cell">
{{title}}
<a href="{{pathFor route="priority.show"}}"><span class="pull-right icon icon-edit"></span></a>
</li>
{{/each}}
</ul>
</template>
请注意,此视图显示所有 优先级 的列表。当我检查 href 时,所有路径都是使用 _id
:
动态生成的
<a href="/priority/yYihyZmZ2xkAso7i5">...
哦,我应该提一下,我也尝试使用 waitOn
方法,因为我认为我可能会在数据之前加载模板,但这也没有帮助...
Router.configure({
...
waitOn: function(){
return Meteor.subscribe('priorities');
}
});
这么多代码,只是为了展示发生了什么!
这是怎么回事?为什么我的 "show" 模板没有给我任何数据?
改变你的路线。
Router.map(function () {
this.route('priority', {
path: '/priority/:_id',
waitOn: function(){
return Meteor.subscribe('priorities',this.params._id);
},
data: function(){
if(this.ready()){
return Priorities.findOne({_id: this.params._id});
}else{
this.render('loading') //if data not ready we render some loading template
}
}
});
});
您不需要为 find();
制作 Meteor.call,而是 data:function()
上的所有内容
以上只是一个例子,所以你可以理解这个想法,但它应该可以工作,因为你期望 _id:priority
和 _id:this.params._id
它是一样的。
请确保您已删除 自动发布包。
并按顺序排列 subscriptions/publish
。
Meteor.publish('Menu', function(){
return Priorities.find();
});
我无法获取模型实例的 'show' 页面来显示其数据。
这是不会显示其数据的模板:
<template name="priority">
<h1>Priority: {{title}}</h1>
</template>
它本身非常简单,但我无法显示 title。 Iron:router 使用以下代码将我们引导至此页面:
Router.route('/priority/:_id', function(){
var priority = this.params._id;
this.render('priority', {
data: function(priority){
Meteor.call('showPriority', priority, function(error){
if (error) {
console.log("An error has occured: " + error);
}
})
}
})
}, {
name: 'priority.show'
});
Meteor.method很简单,就是查询变量priority:
'showPriority': function(priority) {
return Priorities.findOne({_id: priority});
}
带href的视图在这里:
<template name="priorityList">
<ul class="table-view">
{{#each this}}
<li class="table-view-cell">
{{title}}
<a href="{{pathFor route="priority.show"}}"><span class="pull-right icon icon-edit"></span></a>
</li>
{{/each}}
</ul>
</template>
请注意,此视图显示所有 优先级 的列表。当我检查 href 时,所有路径都是使用 _id
:
<a href="/priority/yYihyZmZ2xkAso7i5">...
哦,我应该提一下,我也尝试使用 waitOn
方法,因为我认为我可能会在数据之前加载模板,但这也没有帮助...
Router.configure({
...
waitOn: function(){
return Meteor.subscribe('priorities');
}
});
这么多代码,只是为了展示发生了什么!
这是怎么回事?为什么我的 "show" 模板没有给我任何数据?
改变你的路线。
Router.map(function () {
this.route('priority', {
path: '/priority/:_id',
waitOn: function(){
return Meteor.subscribe('priorities',this.params._id);
},
data: function(){
if(this.ready()){
return Priorities.findOne({_id: this.params._id});
}else{
this.render('loading') //if data not ready we render some loading template
}
}
});
});
您不需要为 find();
制作 Meteor.call,而是 data:function()
以上只是一个例子,所以你可以理解这个想法,但它应该可以工作,因为你期望 _id:priority
和 _id:this.params._id
它是一样的。
请确保您已删除 自动发布包。
并按顺序排列 subscriptions/publish
。
Meteor.publish('Menu', function(){
return Priorities.find();
});