Метеор: сеанс-клиент

Поэтому я пытаюсь создать учебник по клону WhatsApp с угловым метеором, используя Ionic 2 CLI

Этот учебник в основном удаляет client папка в метеорном проекте и использует пакет на стороне клиента-метеора внутри ионного проекта для подключения к метеорному серверу.

Это прекрасно работает, но теперь я хотел бы подписаться на метеорную публикацию с реактивным параметром.

После поиска в документации Meteor API я нашел объект Session:

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

Что особенного в сессии, так это то, что она реактивная. Если вы позвоните Session.get("currentList") из шаблона шаблон будет автоматически перерисовываться всякий раз, когда Session.set("currentList", x) называется.

В документации по подписке на метеор вы можете найти следующий пример:

Tracker.autorun(function () {

Meteor.subscribe("chat", {room: Session.get("current-room")});

Meteor.subscribe("privateMessages");

});

Это позволяет подписаться на сообщения чата в текущей комнате и ваши личные сообщения. Когда вы меняете комнаты, вызывая Session.set("текущая комната", "новая комната"), Метеор будет подписываться на сообщения чата новой комнаты, отменять подписку на сообщения чата исходной комнаты и продолжать оставаться подписанным на ваши личные сообщения.,

Это именно то, что я тоже хочу сделать. Но, как говорится в документации по Session, сессия - это пакет, который я должен добавить в проект метеора:

Чтобы добавить сессию в ваше приложение, выполните эту команду в своем терминале:

meteor add session

Теперь мой вопрос, есть ли способ добавить сессию к пакетам на стороне клиента?

Если я просто попробую позвонить Session.set() это терпит неудачу во время выполнения с Session is not defined

Я предполагаю, что мне понадобится какой-нибудь пакет npm, который извлекает функциональность Session (в основном пакет npm на стороне клиента), такой как https://github.com/idanwe/accounts-base-client-side

Есть ли другой способ сделать это? Как бы я построил свои собственные сеансы на стороне клиента?

Я пытался бежать meteor add session в моем метеорологическом проекте, но не смог найти код для сессии нигде в .meteor папка и npm_modules,

Я также заглянул в метеоритный GitHub, но файл Session.js, который у них есть, содержит только документацию

Любой вклад, как сделать что-то подобное, было бы неплохо

Обновить:

Я заглянул в пакет account-base-client-side и обнаружил, что они автоматически генерируются с использованием сценария, поэтому я сейчас пытаюсь адаптировать этот сценарий для работы с Session, а не account-base. Вы можете найти мою попытку по адресу: https://github.com/AwsmOli/session-client-side

Все еще в работе, но я должен заставить его работать в ближайшее время

Обновление 2:

Смотрите мой ответ, моя сессия клиентская сторона работает сейчас:)

3 ответа

Решение

Я закончил тем, что создал пакет сеанса на стороне клиента сам, и он прекрасно работает.

Если вам это тоже нужно, он доступен на GitHub: https://github.com/AwsmOli/session-client-side

и NPM:

npm install session-client-side

Авторы благодарности idanwe, который создал пакеты на стороне клиента и позволил легко адаптировать свою работу для работы с любым метеорологическим пакетом:)

Чтобы использовать его с приложениями Ionic 2:

импортируйте его в свои точки входа (src/app/main.prod.ts & src/app/main.dev.ts)

import 'session-client-side';

и теперь глобальная переменная Session доступна в любом месте вашего приложения:

 Session.set("aCoolNameFormyAwsmChangingObject", myAwsmChangingObject); 

Спасибо за помощь!

В соответствии с документами Метеор, вы должны импортировать его:

import { Session } from 'meteor/session'

Это включит его на клиенте.

В более ранних версиях метеора это не требовалось, поскольку это был и пакет по умолчанию, и он автоматически импортировался в глобальное пространство имен.

Переменная "Session" должна просто появиться и быть доступной. Если вам нужно это проверить, запустите новый проект, добавьте пакет и напишите некоторый код для доступа к нему. Вероятно, что-то (невольно) уничтожило переменную Session - я видел это раньше с другим пакетом.

Еще один способ сделать это с помощью "getReactively". Ниже приведен помощник, который использует его в запросе. Убедитесь, что вы объявили это перед помощником (иначе это не будет работать). Этот использует результат другого помощника, но это может быть любая переменная, и вы просто назначаете переменную для реактивности, чтобы включить и запустить помощника.

this.helpers({
  currentUser: () => { return Meteor.user() },
  elder: () => {
    let e = Elders.findOne({_id: this.getReactively('this.currentUser._id')});
    if (e) {
      utils.services.setupElder(e);
    }
    return e;
  }
});
Другие вопросы по тегам