Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor数据上下文与iron路由器_Meteor_Iron Router - Fatal编程技术网

Meteor数据上下文与iron路由器

Meteor数据上下文与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

我是Meteor的新手,我正在尝试在显示一段文字的页面中设置数据上下文。我需要访问文章_item.js Template.passageItem.rendered中的数据,但此时未设置上下文。我想我需要类似{{{with passage}}的东西,但one_passage.html中不存在“passage”

下面是一些代码片段。谢谢

路由器.js

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());
};