首页 > 解决方案 > Meteor Helper 使用基于反应变量的查询

问题描述

我正在尝试使用一个助手,它应该返回一个 Collection 指定整个 Collection 的子集,并$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. 这似乎表明 helper 的编译并不满足于它找到的内容。

我还尝试制作tags一个模板本地实例,并添加.get()tags辅助查询中。但结果相同。

我应该从哪里开始寻找?我正确使用 ReactiveArray 吗?是否可以做我想做的事,即有一个基于 ReactiveArray 的反应式查询?

标签: meteorhelper

解决方案


我个人没有使用过 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);
    }
});

推荐阅读