简体   繁体   中英

How render a route relevant subheader with meteor blaze?

The end result of all of what I am about to go over is the subheader is not rendering on screen like i want it to.

Currently there is a mongo collection subheader with a category field and a texth field.

Subheader = new Mongo.Collection('subheader');

Meteor.methods({
  subheaderInsert: function(subheaderIdAttributes) {
  check(String);
  check(subheaderIdAttributes, {
    texth: String,
    category: String
  });
  var subheaderId = _.extend(postAttributes, {
    submitted: new Date()
  });
  var subheaderId = SubheaderId.insert(subheader);
    return {
    _id: subheaderId
  };
}
});

There is a route that subscribes to the subheader and other page data.

Router.route('/', {
  name: 'home',
    controller: MissionstatementpostController,
    waitOn:function () {
  return Meteor.subscribe('subheader', 'home');
  }
});

The publish function appears to work fine.

Meteor.publish('subheader', function(cat) {
  return Subheader.find({category: cat});
});

The correct doc from the mongodb collection is reaching the client. this can be seen by

Subheader.findOne(); output Object {_id: "NPo5cwqgjYY6i9rtx", texth: "ex text", category: "home"}

The problem starts here

The template loaded by the Controller in this case MissionstatementpostController is postlist

<template name="postsList">
    <div class="posts page">
          {{> subheader}}
    <div class="wrapper">
      {{#each posts}}
        {{> postItem}}
      {{/each}}
    </div> 
    {{#if nextPath}}
      <a class="load-more" href="{{nextPath}}">Load more</a>
    {{else}}
      {{#unless ready}}
        {{> spinner}}
      {{/unless}}
    {{/if}}
  </div>
</template>

Here is the subheader template

<template name="subheader">
    <div class="container">
        <p>{{{texth}}}</p>
    </div>
</template>

So what did I mess-up?

thanks

you must create a template helper for your subheader template. To return just the texth field, the helper will be like this.

Template.subheader.helpers({
  texth: function() {
    var sh = Subheader.findOne();
    return sh && sh.texth;
  }
});

You can return the whole document and use the #with helper inside the template.

Template.subheader.helpers({
  subh: function() {
    return Subheader.findOne();
  }
});

<template name="subheader">
    {{#with subh}}
    <div class="container">
        <p>{{{texth}}}</p>
    </div>
    {{/with}}
</template>

You can find more info about template helpers on Meteor Docs .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM