Я новичок в Meteor.js и был бы очень признателен за любую помощь, которую любой мог бы дать по следующим двум вопросам. Я делаю приложение для карточек, где вы нажимаете стрелку, чтобы отобразить следующую флешку. Карточки перетасовываются заранее, и вы проходите через всю колоду, щелкая стрелку.Meteor.js: методы и функции повторного использования в событиях и помощниках
Router.route ('/', function() {
Session.set ('wordArray', _.shuffle(Words.find().fetch()));
Session.set ('index', 0)
this.render('wordPage');
})
Мой шаблон wordPage выглядит следующим образом:
<template name="wordPage">
<div class="post">
<div id = "arrow-right" ></div>
{{ > wordItem word index }}
</div>
</template>
Мои wordPage.js выглядит следующим образом:
Template.wordPage.helpers ({
word: function (index) {
return Session.get ('wordArray') [ index ] ;
},
index: function() { return Session.get ('index'); },
})
wordPage проходит на слове, а индекс к более детальному tempalte с помощью вышеописанного метода.
Template.wordPage.events ({
"click #arrow-right": function (e) {
if (Session.get ('index') < Session.get ('wordArray').length-1) {
console.log(Session.get('index'));
Session.set ('index', Session.get ('index') + 1);
}
}
})
Мои два вопроса:
1) Я хотел бы, чтобы перетасовать ФЛЕШКАРТИНКИ каждый раз, когда страница загружается, и единственный способ, которым я могу понять, как сделать это легко (то есть, без перетасовки вся база данных MongoDB) сохраняет всю колоду карт памяти в массиве через переменную Sessions. Как реализовать что-то, где я не использую переменную Sessions? Каков наилучший способ перетасовки колоды каждый раз, когда я перехожу к корневому файлу, или где-нибудь нажимать кнопку тасования?
2) Я использую Session.get/Session.set LOT в файле wordPage.js. Есть ли способ сохранить эти функции для доступа как к помощникам wordPage, так и к событиям? Я пытался сделать что-то вроде этого:
var word = function (index) { return Session.get ('wordArray') [index]; }
вне помощников и событий блокировать, а затем просто пытаюсь использовать слово (индекс). Но похоже, что он работает только, если я делаю слово глобальной переменной.
Большое спасибо.
Спасибо большое. Кажется, я не могу заставить эти методы работать, и мое приложение не обнаруживает коллекции слов: 1) Может ли api.export идти в нижней части файла cards.js? 2) Я объявляю «Words = new Mongo ...» в lib/collection, поэтому я должен снова объявлять здесь? 3) Чтобы получить доступ к словамAccessor, я должен просто набрать словаAccessor.shuffledWords в любом месте приложения правильно? Еще раз спасибо. –
1) 'api.export' экспортирует переменные в соответствии с их именем после загрузки всего файла. 2) Да, или объявить его раз и навсегда в пакете (но вы можете запускать проблемы с областью, если вы не экспортировали глобально «Слова»!), Объявив его дважды, это не так уж плохо, проблема в этом случае (все равно та же коллекция за ней). 3) Если вы экспортировали 'wordsAccessor' и импортировали его глобально (с помощью команды' meteor add' или 'api.imply' в другом пакете), тогда вы можете просто использовать' wordsAccessors' всюду. –
Gotcha. Я прочитал немного больше, и для тех, кто рисковал на этом посту, чтение о том, как Connect.js и Express.js построены поверх узла, может помочь понять, что такое весь объект «api». Спасибо Kyll. –