通过模板

时间:2016-11-01 08:51:48

标签: javascript mongodb meteor meteor-blaze flow-router

我试图访问模板上的流星集合的内容。第一步是搜索,允许应用程序显示名为玩家的Mongo集合中的特定项目,然后当您点击该项目时,它会转到 showPerson 页面显示这些项目的内容。到目前为止,我已经能够使搜索工作,但当您点击某个项目时,它会呈现新页面,但不会填充数据。

我试过在这里找到答案,但一直无法弄清楚我做错了什么。

另外,如果您在<template name="search">中注意到我__originalId。我还试过_idid,但仍然没有成功。说到ID这些之间的区别是什么?

我的额外套餐是

easy:search
aldeed:collection2
aldeed:autoform
kadira:flow-router
kadira:blaze-layout
arillo:flow-router-helpers

我还安装了autopublish和insecure,所以我觉得这不是订阅问题吗?

免责声明 - 我是meteor和javascript的新手,所以请随意撕开它,握住我的手:)

我的HTML是

搜索选项

<template name="search">
  {{> EasySearch.Input index=playersIndex}}

  <ul>
    {{#EasySearch.Each index=playersIndex}}
      <li>Name of the player: <a href="{{pathFor 'showPerson'}}/{{__originalId}} ">{{name}}</a> {{name}}  Score of the Player:  ({{score}})</li>
    {{/EasySearch.Each}}
  </ul>

  {{> EasySearch.LoadMore index=playersIndex}}

  {{#EasySearch.IfNoResults index=playersIndex}}
    <div class="no-results">No results found!</div>
  {{/EasySearch.IfNoResults}}
</template>

应该显示内容的页面

<template name="showPerson">
  <h1>Show Person Details: {{name}}</h1>
  <div class="row">
 name: {{name}}
  </div>
  <div class="row">
    score: {{score}}
  </div>
  <div class="row">
    age: {{age}}
  </div>
</template>

我的Javascript是

Tracker.autorun(function () {
  let cursor = PlayersIndex.search('Marie'); // search all docs that contain "Marie" in the name or score field

  console.log(cursor.fetch()); // log found documents with default search limit
  console.log(cursor.count()); // log count of all found documents
});


Template.search.helpers({
  playersIndex: () => PlayersIndex // instanceof EasySearch.Index  
  });


Template.update.helpers({
    exampleDoc: function () {
        return Players.findOne();
  }
});



Template.myMenu.helpers({
  items: function(){
    return MyCollection.find();
  }
});


Template.myMenu.events({
  'onChange #mySelect': function(ev){
    ...handle the event.
  }
});

我的路线

FlowRouter.route('/', {

   action: function() {
    BlazeLayout.render("home");
   }
});



FlowRouter.route( '/players/:_id', {
  name: "showPerson",
  action: function( params ) {
    console.log( params._id );

    BlazeLayout.render( 'showPerson'); 
  }
});

FlowRouter.route('/hello', {
   action: function() {
    BlazeLayout.render('hello');
   }
});

如果它有帮助,这里有两个截图

Home page with search

showPerson page

数据库和架构

Players = new Mongo.Collection('players');

 PlayersSchema = new SimpleSchema({
    "name": {
    type: String,
    label: "Business Name"
  },
  "address": {
    type: String,
    label: "Address"
  },
  "website": {
    type: String,
    label: "Website",
    optional: true
  },
}
Players.attachSchema( PlayersSchema );



PlayersIndex = new EasySearch.Index({
  collection: Players,
  fields: ['name', 'score'],
  engine: new EasySearch.MongoDB ()
});

2 个答案:

答案 0 :(得分:0)

您的showPerson模板未显示任何数据,因为您未向其提供任何数据。 您应该从集合中获取与route / players /:_ id

中给出的id匹配的玩家数据

阅读https://guide.meteor.com以获取更多信息。

答案 1 :(得分:0)

首先使用showPerson

包装{{#with}}模板
<template name="showPerson">
{{#with person}}
  <h1>Show Person Details: {{name}}</h1>
  <div class="row">
    name: {{name}}
  </div>
  //etc...
{{/with}}
</template>

然后添加帮助器以提供{{#with}}

的数据
Template.showPerson.helpers({
  person() {
    return Players.findOne(FlowRouter.getParam('_id'));
  }
});