流星数据上下文与铁路由器

Car*_*ine 2 meteor iron-router

我是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); }
    });
});
Run Code Online (Sandbox Code Playgroud)

one_passage.html

<template name="onePassage">
    {{> passageItem}}
</template>
Run Code Online (Sandbox Code Playgroud)

通路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>
Run Code Online (Sandbox Code Playgroud)

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
    });
};
Run Code Online (Sandbox Code Playgroud)

hha*_*isc 5

采集

假设你创建了这样的Passages集合,并且你已经打开了autopublish(默认情况下是这样):

Passages = new Meteor.Collection('passages');
Run Code Online (Sandbox Code Playgroud)

路由器地图

你像这样映射你的路由器:

Router.map(function() {
    this.route('onePassage', { 
        path: '/passages/:_id',
        template: 'passageItem' // <-- to be explicit
        data: function() {
            return Passages.findOne(this.params._id);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

模板

您的模板看起来像下面的模板:

<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>
Run Code Online (Sandbox Code Playgroud)

模板中"this"的范围将设置为Passages.findOne选择器返回的文档.

如果模板没有呈现,则意味着您正在搜索不存在的段落,或者您的段落缺少标题或内容字段.

渲染函数

现在是你问题的最后一部分.渲染函数中"this"的范围设置为模板实例.因此,如果您需要访问模板数据,请尝试以下方法:

Template.passageItem.rendered = function() {
    console.log(this.data); // you should see your passage object in the console
};
Run Code Online (Sandbox Code Playgroud)