我使用 Meteor 1.2.1 。我目前正在开发课程目录Web应用程序。 我正在尝试像Angular Filters一样创建过滤功能。它应该让用户指定他的需求,然后当他更改过滤器时,课程列表会自动刷新。
这是我的代码:
app.html
<!-- ********** -->
<!-- courseList -->
<!-- ********** -->
<template name="courseList">
<div class="list-header">
<div>Course Name</div>
<div>Description</div>
<div>Category</div>
<div>Modality</div>
<div>Unit</div>
</div>
<div class="list-body">
{{ #each course }}
{{ > courseRow}}
<hr />
{{ /each }}
</div>
</template>
app.js
Template.courseList.helpers({
'course': function(){
Session.setDefault('course', Courses.find().fetch());
return Session.get('course');
}
});
所以当我运行它时,我得到了上面course helper
的空集,即使数据库中存在一些虚拟数据。
在我看来,问题出在Session.setDefault()
上。当我在查找后立即调用Session.course
变量时,我得到一个空数组[]
,可能是因为没有时间从服务器获取数据(或者可能没有,因为我是现在用autopublish开发,我真的不知道。)
在我应用了一些过滤器(此处未显示的代码)后,一切都恢复正常。这种初始化只是问题所在。
我试图在Session.set()
,Template.courses.rendered()
,Template.courses.created()
,Template.courses.onRendered()
内打电话Template.courses.onCreated()
(是的,我有点绝望),但没有一个工作
有人可以就这个问题提出建议吗?也许我没有尝试正确的Meteor aproach,因为我是流星初学者。
谢谢!
答案 0 :(得分:0)
我认为您尝试使用模板subsciption。所以你可以发一些条款出版。例子;
Template.foo.onCreated(function() {
this.name = new reactiveVar("");
this.autorun( () => {
const terms = {
name: this.name.get()
};
this.subscribe("Posts_list", terms);
});
});
Template.foo.helpers({
lists: function() {
return Posts.find().fetch();
}
});
答案 1 :(得分:0)
这里有两件事。首先,只要Courses.find().fetch()
或Session.get('course')
的结果发生变化,您的助手就会运行,因为它们都是reactive data sources。为了避免这种情况,你可以做到
Template.foo.helpers({
lists: function() {
return Posts.find().fetch();
}
});
如果您想设置会话变量以便可以在其他地方使用它,那么您可以使用Session.set
而不是Session.setDefault
,因为Session.setDefault
只会分配值会话变量尚不可用。但是我不知道你为什么要这样做,因为你可以使用Posts.find().fetch()
而不是会话变量。两者都是被动的。
Template.foo.helpers({
lists: function() {
Session.set('course', Courses.find().fetch());
return Session.get('course');
}
});
如果您只想在获得非空数据时第一次分配course
会话变量,那么您可能希望这样做。
Template.foo.helpers({
lists: function() {
if (Courses.find().count() > 0) {
Session.setDefault('course', Courses.find().fetch());
return Session.get('course');
} else {
return [];
}
});
如果你能说出为什么需要会话变量,我们可能会想到一种不同的方法来解决这个问题。
希望它有所帮助。