Session.get不在Meteor.js中设置变量

时间:2013-11-22 15:35:41

标签: javascript node.js meteor handlebars.js

fruit是模板助手Template.fruits.nameTemplate.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)
        }
    });

}());

3 个答案:

答案 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”