Meteor数据上下文与iron路由器
我是Meteor的新手,我正在尝试在显示一段文字的页面中设置数据上下文。我需要访问文章_item.js Template.passageItem.rendered中的数据,但此时未设置上下文。我想我需要类似{{{with passage}}的东西,但one_passage.html中不存在“passage” 下面是一些代码片段。谢谢 路由器.jsMeteor数据上下文与iron路由器,meteor,iron-router,Meteor,Iron Router,我是Meteor的新手,我正在尝试在显示一段文字的页面中设置数据上下文。我需要访问文章_item.js Template.passageItem.rendered中的数据,但此时未设置上下文。我想我需要类似{{{with passage}}的东西,但one_passage.html中不存在“passage” 下面是一些代码片段。谢谢 路由器.js Router.map(function() { this.route('passagesList', {path: '/'}); th
Router.map(function() {
this.route('passagesList', {path: '/'});
this.route('onePassage', {
path: '/passages/:_id',
data: function() { return Passages.findOne(this.params._id); }
});
});
Router.map(function() {
this.route('passagesList', {path: '/'});
this.route('onePassage', {
path: '/passages/:_id',
data: {
passage: function() { return Passages.findOne(this.params._id); }
}
});
});
one_passage.html
<template name="onePassage">
{{> passageItem}}
</template>
我假设一篇文章由{'title':'','content':''组成 那么这应该是可行的: 在router.js中
Router.map(function() {
this.route('passagesList', {path: '/'});
this.route('onePassage', {
path: '/passages/:_id',
data: {
passage: function() { return Passages.findOne(this.params._id); }
}
});
});
在passage-item.html中:
<template name="passageItem">
{{#each passage}}
<div class="passage">
<div class="one-passage">
<h4><a href= "{{pathFor 'onePassage'}}">{{title}}</a></h4>
<div class="passage-content">
{{content}}
</div>
</div>
</div>
{{/each}}
</template>
{{{每段}
{{content}}
{{/每个}}
收藏
假设您像这样创建了“段落”集合,并且已启用“自动发布”(默认情况下为“自动发布”):
路由器地图
您将路由器映射为:
Router.map(function() {
this.route('onePassage', {
path: '/passages/:_id',
template: 'passageItem' // <-- to be explicit
data: function() {
return Passages.findOne(this.params._id);
}
});
});
从Meteor 1.0.3.1开始,新的Iron路由器数据选择器似乎是
Template.TemplateName.rendered = function() {
console.log(UI.getData());
};
我最后做的是将PassageId添加到html中。然后在javascript中再次获取它并使用它获取数据。var passageId=$('.one passage').attr('id');数据=passions.findOne(passageId);是的,文章的标题、内容和文字都是高亮的,我想在Template.passageItem.rendered中使用它们来设置背景色。我尝试了你的建议,但对我来说不起作用。我认为命名数据是我错过的,但我尝试了你所说的,并且#使用和{{>passageItem passage}和所有这些,我得到这仍然是一个窗口。这不起作用,因为在router map“data”函数中,你使用findOne选择器——它返回一个对象——并使用了{{{{每个}}在模板中添加标记。{{{#each}}标记需要一个集合游标或数组进行迭代。非常有用!我想我知道发生了什么。Template.passageHighlight.rendered=function(){console.log('rendered this'+this.data);//按预期工作Meteor.defer(function(){console.log('defered this'+this.data);//未定义。因此,有效的方法是在defer.Template.passageHighlight.rendered=function()之前设置passageId{var passageId=this.data.\id;Meteor.defer(function(){你完全正确!Meteor.defer函数回调中'this'的范围发生了更改。这应该是答案!
Router.map(function() {
this.route('onePassage', {
path: '/passages/:_id',
template: 'passageItem' // <-- to be explicit
data: function() {
return Passages.findOne(this.params._id);
}
});
});
<template name="passageItem">
<div class="passage">
<div class="one-passage">
<h4><a href= "{{pathFor 'onePassage'}}">{{title}}</a></h4>
<div class="passage-content">
{{content}}
</div>
</div>
</div>
</template>
Template.passageItem.rendered = function() {
console.log(this.data); // you should see your passage object in the console
};
Template.TemplateName.rendered = function() {
console.log(UI.getData());
};