2016-01-02 2 views
1

Я показываю список элементов и для каждого элемента, принадлежащего пользователю. Я перечисляю имя, описание и пользователя, которые его создали (отсюда имя). Я хочу также иметь ссылку, которая идет к пользователю, который создал элемент. Примечание. Это также ссылка на страницу элемента.Как я могу перейти на страницу профиля пользователя?

Вот что я сделал до сих пор:

пакеты

aldeed:collection2 
aldeed:simple-schema 
iron:router 
aldeed:autoform 
useraccounts:iron-routing 
accounts-password 
accounts-base 
useraccounts:core 
zimme:active-route 
todda00:friendly-slugs 
reywood:publish-composite 

клиент/товар/listed_item.html

<template name="listedItem"> 
    <a href="{{pathFor 'itemPage'}}"> 
    {{name}} 
    </a> 
    <a href="{{pathFor 'profile'}}"> 
    {{usernameFromId user}} 
    </a> 
</template> 

клиент/элементы/items.html

<template name="items"> 
<div class="items"> 
     {{#each items}} 
      {{> listedItem}} 
     {{/each}} 
</div> 
</template> 

клиент/subscriptions.js

Meteor.subscribe('items'); 
Meteor.subscribe('allUsernames'); 
Meteor.subscribe('users'); 

клиент/helpers.js

Template.items.helpers({ 
    items: function() { 
    return Items.find(); 
    }, 
}); 

Template.registerHelper("usernameFromId", function (userId) { 
    var user = Meteor.users.findOne({_id: this.userId}); 
    return user.profile.name; 
}); 

сервер/publications.js

Meteor.publish("items", function() { 
    return Items.find(); 
}); 

Meteor.publish("users", function() { 
    return Meteor.users.find({}, { 
    fields: { profile: 1 } 
    }); 
}); 

Meteor.publish("allUsernames", function() { 
    return Meteor.users.find({}, { 
    fields: { 'profile.name': 1, 'services.github.username': 1 } 
    }); 
}); 

Lib/routes.js

Router.route('/items', function() { 
    this.render('items'); 
}); 

Router.route('/users/:_id', { 
    template: 'profile', 
    name: 'profile', 
    data: function() { 
    return Meteor.users.findOne({_id: this.params._id}); 
    } 
}); 

Что это, хотя это показывает URL пунктов для URL пользователей, так это ссылки на пользователя, которого нет. то есть items/1234 = users/1234, когда в системе действуют только пользователи/1. Как я могу получить ссылку на правильный идентификатор пользователя?

+0

Только вопрос: в client/helpers.js у вас есть параметр userId, но внутри функции вы используете this.userId. Возможно, вы намеревались найти пользователя с параметром userId? –

+0

@JosHarink Да, это правильно. Я хотел, чтобы помощник работал над поиском полей пользователей для любого шаблона. –

ответ

1

использовать ссылку с построенной URL

<template name="listedItem"> 
    <a href="{{pathFor 'itemPage'}}"> 
    {{name}} 
    </a> 
    <a href="http://yourdomain.com/users/{{user}}"> 
    {{usernameFromId user}} 
    </a> 
</template> 
+0

Если я сделаю этот метод, как бы я справился с использованием localhost? Это похоже на его жесткую кодировку. –

+1

жаль, что я написал полный URL-адрес, чтобы быть понятным, что это такое, но вы можете, конечно, использовать относительные пути: '' – MrE

+0

Я не мог заставить это работать на все. –

1

В этой части:

Router.route('/users/:_id', { 
    template: 'profile', 
    name: 'profile', 
    data: function() { 
    return Meteor.users.findOne({_id: this.params._id}); 
} 
}); 

вы ссылочный маршрут и создали маршрут в шаблон с именем «профилем», но я могу Нет шаблона с этим именем. Возможно, вы просто забыли включить его здесь? или что у вас действительно нет этого шаблона?

Просто убедившись.

1

Попробуйте это:

Router.route('/users/:_id', { 
template: 'profile', 
name: 'profile' 
} 

В помощнике вы можете retrive, что Индентификационный этим:

Router.current().params._id 
1

Я обычно использую этот путь: В шаблоне:

<div class="css-light-border"> 
    <a href="/document/{{_id}}">{{title}}</a> 
</div><!--/class light-border --> 

В файле router.js:

Router.route('/document/:_id', function(){ 
    Session.set('docid', this.params._id); 
    this.render('navbar', {to: "header"}); 
    this.render('docItem', {to: "main"}); 
    }); 

В основном здесь docid является _id документа, который я хочу отобразить. Вот пример того, как вы извлекаете из базы данных:

somehelper:function(){ 
     var currentId = Session.get('docid'); 
     var product = Products.findOne({_id:currentId}); 
     return product; 

Я думаю, что это простой способ, поскольку он использует сеансы.

 Смежные вопросы

  • Нет связанных вопросов^_^