Javascript 不同模板的模板级订阅
我正在用一个名为Javascript 不同模板的模板级订阅,javascript,templates,search,meteor,meteor-blaze,Javascript,Templates,Search,Meteor,Meteor Blaze,我正在用一个名为课程的数据库构建一个应用程序。用户应该能够使用搜索模板搜索课程,并选择他们想要添加的课程。他们选择的课程应显示在选择的模板中 Courses现在有两种出版物:Courses.all和Courses.search,第二种出版物采用搜索参数: Meteor.publish('courses.all', function () { return Courses.find({}); }); Meteor.publish('courses.search', function(q)
课程
的数据库构建一个应用程序。用户应该能够使用搜索
模板搜索课程,并选择他们想要添加的课程。他们选择的课程应显示在选择的模板中
Courses
现在有两种出版物:Courses.all
和Courses.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
操作符。)
然后,搜索
模板订阅课程。搜索
(遵循本指南:):
然后,每当提交搜索表单时,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);
}
}
很简单。然后,在时间表
中,我订阅课程。所有
,并调用课程。查找
,我认为它应该返回课程的结果。所有
:
courses() {
let out = Meteor.user().courses.map((course) => {
return Courses.findOne(course);
});
return out;
}
问题是:在搜索结果中未返回的任何课程ID(即在课程的输出中。搜索
)在计划
调用课程。findOne
中找不到。但是,我知道,对于同一个模板,不能有两个模板级别的订阅。是否也不能对不同的模板进行两个模板级订阅?如果是这样的话,有谁能建议一种变通方法,让计划
查看课程中的所有值,而搜索
只查看搜索结果
(我正在使用Meteor 1.4.2.1。)我正在考虑的一个选项是定义一个特殊的/search?q=query
路径,然后让FlowRouter负责交付课程。所有到计划和课程。搜索到搜索,但是我想知道是否有一种方法可以通过模板级别的订阅来实现这一点。在onCreated()中,您有一个自动运行,而在它内部,您有一个。subscribe()。我不确定“this”在那个上下文中指的是您的模板。也许在那里创建一个“let self=this”并尝试“self.subscribe()”。我要做的另一件事是获取某种客户端minimongo检查工具,看看您的客户端是否发布了您认为您获得的数据。我想我理解您在帮助器中所做的事情(即,您的用户对象上有课程,并且您只希望获得分配给该用户的课程),但我会通过直接检查minimongo数据来消除该代码的问题。您的计划模板需要订阅课程。所有-即,您应该有两个模板,每个模板都有一个不同的订阅。minimongo包含所有订阅的并集。每个模板应在minimongo上执行必要的搜索过滤器。千万不要以为minimongo只有你需要的东西。我正在考虑的一个选择是定义一个特殊的/search?q=query
路径,然后让FlowRouter负责提供课程。所有到计划和课程。search
到搜索,但是我想知道是否有一种方法可以通过模板级别的订阅来实现这一点。在onCreated()中,您有一个自动运行,而在它内部,您有一个。subscribe()。我不确定“this”在那个上下文中指的是您的模板。也许在那里创建一个“let self=this”并尝试“self.subscribe()”。我要做的另一件事是获取某种客户端minimongo检查工具,看看您的客户端是否发布了您认为您获得的数据。我想我理解您在帮助器中所做的事情(即,您的用户对象上有课程,并且您只希望获得分配给该用户的课程),但我会通过直接检查minimongo数据来消除该代码的问题。您的计划模板需要订阅课程。所有-即,您应该有两个模板,每个模板都有一个不同的订阅。minimongo包含所有订阅的并集。每个模板应在minimongo上执行必要的搜索过滤器。千万不要以为minimongo只有你需要的东西。
courses() {
let out = Meteor.user().courses.map((course) => {
return Courses.findOne(course);
});
return out;
}