fruit
是模板助手Template.fruits.name
和Template.fruits.nick
之间共享的变量,以防止在每个辅助函数中复制代码。
但是,当触发change #fruit-selector
事件处理程序时,共享变量fruit
即使由Session.get('fruit')
设置也不会更改。
这是否意味着我不能使用这种声明fruit
变量的方法,如果我希望它被反应?
main.js
(function() {
// Set default fruit
if(!Session.get('fruit')) {
Session.set('fruit', 'apple');
}
var fruit = Session.get('fruit');
Template.fruits.name = function() {
return fruit;
};
Template.fruits.nickname = function() {
return fruit + 'y';
};
Template.fruits.name2 = function() {
return Session.get('fruit');
};
Template.fruits.events({
'change #fruit-selector': function(e) {
Session.set('fruit', e.target.value);
console.log('fruit: ' + fruit)
}
});
}());
答案 0 :(得分:1)
您必须在模板助手中使用Session.get('fruit')
,否则他们将不会响应更改(fruit
不是被动数据源,而是从被动数据源获取值)。
PS
使用Session.setDefault('fruit', 'apple')
代替您的方法。
答案 1 :(得分:0)
试试这个(你的意思是Template.fruit.nickname还是Template.fruits.nickname?):
(function() {
// Set default fruit
if(!Session.get('fruit')) {
Session.set('fruit', 'apple');
}
Template.fruits.name = function() {
return Session.get('fruit');
};
Template.fruit.nickname = function() {
return Session.get('fruit') + 'y';
};
Template.fruits.name2 = function() {
return Session.get('fruit');
};
Template.fruits.events({
'change #fruit-selector': function(e) {
Session.set('fruit', e.target.value);
console.log('fruit: ' + Session.get('fruit'))
}
});
}());
答案 2 :(得分:0)
看起来,session不再是默认meteor包的一部分。 转到命令提示符并运行“meteor add session”