Метеор: сеанс-клиент
Поэтому я пытаюсь создать учебник по клону 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;
}
});