不同模板的模板级订阅

时间:2016-12-25 21:09:57

标签: javascript templates search meteor meteor-blaze

我正在使用名为Courses的数据库构建应用。用户应该能够使用search模板搜索课程,并选择他们想要添加的课程。他们选择的课程应显示在selected模板中。

Courses目前有两个出版物:courses.allcourses.search,其中第二个出版物采用搜索参数:

Meteor.publish('courses.all', function () {
    return Courses.find({});
});

Meteor.publish('courses.search', function(q) {
    let query = {}, projection = {limit: 10, sort: {dept: 1, courseNo: 1}};

    if (q && q.length > 0) {
        query = {
            $text: {
                $search: q,
            }
        }
    }

  let out = Courses.find(query, projection);
  return out;
});

(请注意,courses.search必须在服务器上进行,因为Minimongo尚不支持$text运算符。)

search模板然后订阅courses.search(遵循本指南:https://themeteorchef.com/tutorials/simple-search):

Template.search.onCreated(function searchOnCreated() {
    this.state = new ReactiveDict();

    let template = Template.instance();
    template.searchQuery = new ReactiveVar();
    template.searching = new ReactiveVar(false);

    this.autorun(() => {            
        this.subscribe('courses.search', template.searchQuery.get(), () => {
            setTimeout(() => {
                template.searching.set(false);
                Tracker.flush();
                $(".collapsible").collapsible(); // needed for the UI
            }, 300);
        });
    });
});

然后,每当提交搜索表单时,template.searchQuery都会更新:

"submit #search-form" (evt, template) {
    evt.preventDefault();
    let value = $("[name=search]").val().trim();
    if (value !== "") {
        template.searchQuery.set(value);
        template.searching.set(true);
    }   else if (value === "") {
        template.searchQuery.set(value);
    }
}

足够简单。然后,在schedule内,我订阅courses.all,并致电Courses.find,我认为应该从courses.all返回结果:

courses() {
    let out = Meteor.user().courses.map((course) => {
        return Courses.findOne(course);
    });

    return out;
}

问题是:courses.searchschedule的调用中找不到搜索结果中未返回的任何课程ID(即Courses.findOne的输出中)。但我知道,您不能为同一个模板提供两个模板级订阅。您是否也不能对不同的模板进行两次模板级订阅?如果是这样,任何人都可以建议一种解决方法,让schedule看到课程中的所有值,而search只能看到搜索结果吗?

(我正在使用Meteor 1.4.2.1。)

0 个答案:

没有答案
相关问题