我是Meteor的新手,我正在尝试在显示一个段落的页面中设置数据上下文。我需要访问passage_item.js Template.passageItem.rendered中的数据,但此时没有设置上下文。我想我需要{{#with passage}}之类的内容,但one_passage.html中不存在“passage”。
以下是一些代码段。感谢。
router.js
Router.map(function() {
this.route('passagesList', {path: '/'});
this.route('onePassage', {
path: '/passages/:_id',
data: function() { return Passages.findOne(this.params._id); }
});
});
one_passage.html
<template name="onePassage">
{{> passageItem}}
</template>
通道-item.html
<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>
passage_item.js
Template.passageItem.helpers({
});
Template.passageItem.rendered = function() {
Meteor.defer(function() {
$('.passage-content').lettering('words');
//I want to be able to access the data object here. I have a list of words that are highlighted
});
};
答案 0 :(得分:5)
<强>集合强>
假设您创建了这样的Passages集合,并且您已启用自动发布(默认情况下是这样):
Passages = new Meteor.Collection('passages');
路由器地图
你映射了这样的路由器:
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>
模板中“this”的范围将设置为Passages.findOne选择器返回的文档。
如果模板没有呈现,则意味着您正在搜索不存在的段落,或者您的段落缺少标题或内容字段。
呈现功能
现在问题的最后部分。渲染函数中“this”的范围设置为模板实例。因此,如果您需要访问模板数据,请尝试以下方法:
Template.passageItem.rendered = function() {
console.log(this.data); // you should see your passage object in the console
};
答案 1 :(得分:2)
从Meteor 1.0.3.1开始,新的Iron Router数据选择器似乎是......
Template.TemplateName.rendered = function() {
console.log(UI.getData());
};
答案 2 :(得分:-1)
我假设一段包含{'title':'','content':''}
然后这应该有效:
<\ n>在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>