Session.set('coursesReady', false)
;在启动时。
更新
我把它变成了一个更简单的问题。请考虑以下代码。
在router.js
Router.route('/', function () {
Meteor.subscribe("courses", function() {
console.log("data ready")
Session.set("coursesReady", true);
});
}
并在主模板Main.js
Template.Main.rendered = function() {
if (Session.get('coursesReady')) {
console.log("inject success");
Meteor.typeahead.inject();
}
打印“数据就绪”后,不会打印“注入成功”消息。为什么反应性在这里不起作用?
答案 0 :(得分:1)
反应性“无效”,因为rendered
仅执行一次(它不是被动的)。您需要将会话检查包装在template autorun内,以便重新评估它们:
Template.Main.rendered = function() {
this.autorun(function() {
if (Session.get('coursesReady')) {
console.log("inject success");
Meteor.typeahead.inject();
}
});
};
如果您想在渲染模板之前确保加载数据,可能更好的解决方案是wait on订阅。
Router.route('/', {
// this template will be rendered until the subscriptions are ready
loadingTemplate: 'loading',
waitOn: function () {
// return one handle, a function, or an array
return Meteor.subscribe('courses');
},
action: function () {
this.render('Main');
}
});
现在你的rendered
可以这样做了:
Template.Main.rendered = function() {
Meteor.typeahead.inject();
};
不要忘记添加加载模板。
答案 1 :(得分:0)
解决您的问题
Template.registerHelper("course_data", function() {
console.log("course_data helper is called");
if (Session.get('coursesReady')) {
var courses = Courses.find().fetch();
var result = [ { **Changed**
name: 'course-info1',
valueKey: 'titleLong',
local: function() {
return Courses.find().fetch();
},
template: 'Course'
}];
Session.set('courseResult', result); **New line**
return Session.get('courseResult'); **New line**
,
<强>解释强>
答案是在返回辅助函数时需要与反应性相关联,以便Blaze(模板渲染器)知道何时重新渲染。
非反应性(随着值的变化,DOM不会发生变化)
Template.Main.helpers({
course_data: UI._globalHelpers.course_data ** Not reactive
});
基本上:UI._globalHelpers.course_data返回一个不被反应的对象数组:
return [
{
name: 'course-info1',
valueKey: 'titleLong',
local: function() {
return Courses.find().fetch();
},
template: 'Course'
},
<强>活性强>
来自Meteor文档: http://docs.meteor.com/#/full/template_helpers
Template.myTemplate.helpers({
foo: function () {
return Session.get("foo"); ** Reactive
}
});
将Session.get函数返回给Blaze是被动的;因此,模板会随着值的变化而变化。