Meteor Helper использует запрос на основе реактивной переменной - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь использовать помощника, который должен вернуть коллекцию, указав подмножество всей коллекции с $in, используя реактивный массив из templates:array.

У меня есть

var tags = new ReactiveArray();

и в некоторых случаях я изменяю содержимое массива, что-то вроде

tags.pushArray(note.tags);

(или, может быть, я должен использовать .set()?)

Мой помощник

Template.editor.helpers({
    tagslist() {
        return Tags.find({ _id: { $in : tags }});
    }, 
});

Но тогда я получаю исключение в meteor.js:1010, которое выглядит так

if (allArgumentsOfTypeString)
   console.log.apply(console, [Array.prototype.join.call(arguments, " ")]);

В стеке есть compileValueSelector. Похоже, это указывает на то, что компиляция помощника не удовлетворена тем, что он находит.

Я также пытался сделать tags локальным экземпляром шаблона и добавить .get() к tags в запросе помощника. Но с тем же результатом.

С чего мне начать искать? Я правильно использую ReactiveArray? Можно ли делать то, что я хочу, а именно иметь реактивный запрос на основе ReactiveArray?

1 Ответ

0 голосов
/ 27 июня 2018

Лично я не использовал ReactiveArray, но я предполагаю, что этот же шаблон будет работать. Я придерживаюсь ReactiveVar, так что вот пример, который должен привести вас в правильном направлении.

Template.editor.onCreated(function () {
    const instance = this;
    instance.tags = new ReactiveVar([]);
});

Template.editor.helpers({
    tagslist() {
        const tags = Template.instance().tags.get();
        return Tags.find({ _id: { $in : tags }});
    }
});

Template.editor.events({
    'click .tag'(event, instance){
        const tag = this;
        const tags = instance.tags.get();
        tags.push(tag);
        instance.tags.set(tags);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...