Примере:

Я пишу приложение Meteor, которое занимается списком сообщений в блоге. Все сообщения блога хранятся в коллекции под названием «Сообщения». Для маршрутизации использую Iron Router.

Я хочу показать пользователю список всех сообщений, созданных определенным автором. Этот список будет отображаться с помощью пробелов. Поэтому мне нужно предоставить данные в шаблон.

Проблема:

Насколько мне известно, это можно сделать двумя способами:

  1. Использование помощников по шаблонам
  2. Использование свойства data моего маршрута

Вариант 1, пример:

Template.postList.helpers({
postsToDisplay: function(){
    return Posts.find({author: 'someAuthor'});
}
})

Вариант 2 пример:

//Inside my route
data: function(){
    return {postsToDisplay: Posts.find({author: 'someAuthor'})};
}

Вопрос

Есть ли какие-нибудь существенные различия между этими двумя методами? Есть ли причина предпочесть одно другому? Есть ли лучшая производительность?

Большое спасибо за ответы!

8
tomet 19 Авг 2014 в 17:35

1 ответ

Лучший ответ

Есть ли какие-нибудь существенные различия между этими двумя методами? Есть ли лучшая производительность?

Не совсем, в конце концов, это просто выбор дизайна.

Есть ли причина предпочесть одно другому?

Я бы придерживался метода железо-роутер + данные, вот почему:

  • Вы можете использовать waitOn для фактического отображения списка только тогда, когда данные, полученные с сервера, готовы, использование Router.onBeforeAction("loading") и loadingTemplate улучшает общее впечатление пользователя.

  • Вы можете создать шаблон постов, не зависящий от данных, который можно использовать в различных контекстах.

Последний пункт особенно интересен, потому что он позволяет вам определить шаблон многократного использования, который вы можете использовать для отображения списка последних сообщений, списка сообщений в категории, списка сообщений определенного автора, которого вы хотите достичь в первое место и т.д ...

<template name="postsList">
  {{#each posts}}
    {{> postListItem}}
  {{/each}}
</template>

Здесь вы можете определить сообщения как помощник для postsList, но лучше позволить родительскому шаблону, который будет вызывать postsList, назначать сообщения всем, что ему нужно.

template:"postsList",
data:function(){
  return {
    posts:Posts.find({
      "author":this.params.author
    })
  };
}

Этот шаблон проектирования позволяет нам определить маршрут, который предоставляет контекст данных, который представляет список сообщений данного автора, но вы также можете определить другой маршрут, предоставляющий контекст данных, который будет перечислять сообщения по категориям.

Итак, переместив роль поставщика данных из помощника шаблона в определение маршрута, мы получили гораздо более многоразовый шаблон, что приятно.

7
Mahmoud Mostafa 5 Фев 2015 в 05:19