Meteor Session定义然后突然未定义

时间:2014-12-11 22:03:47

标签: meteor iron-router

升级到Meteor 1.0.1(安全更新)后,我得到了一些奇怪的行为(这可能是由于软件包更新造成的)。首先它被定义但是当我导航到另一个页面时它是未定义的。

我在启动时的客户端文件夹中有以下内容

var getUserLanguage;
getUserLanguage = function () {
    var lang;
    lang = void 0;
    if (navigator && navigator.userAgent && (lang = navigator.userAgent.match(/android.*\W(\w\w)-(\w\w)\W/i))) {
        lang = lang[1];
    }
    if (!lang && navigator) {
        if (navigator.language) {
            lang = navigator.language;
        } else if (navigator.browserLanguage) {
            lang = navigator.browserLanguage;
        } else if (navigator.systemLanguage) {
            lang = navigator.systemLanguage;
        } else {
            if (navigator.userLanguage) {
                lang = navigator.userLanguage;
            }
        }
        lang = lang.substr(0, 2);
    }
    console.log("current language is", lang);
    Session.set("currentUserLang", lang);
    console.log('aaa ' + Session.get("currentUserLang"));
    return lang;
};

Meteor.startup(function () {
    Session.set("showLoadingIndicator", true);
    TAPi18n.setLanguage(getUserLanguage())
        .done(function () {
            Session.set("showLoadingIndicator", false);
        })
        .fail(function (error_message) {
            // Handle the situation
            //console.log(error_message);
        });
});

然后我在编辑模板JS文件中有以下内容

Template.editProducer.rendered = function () {
    // Setup parsley form validation
    $('#form').parsley({trigger: 'change'});

    // sets parsley lang
    Tracker.autorun(function () {
        console.log("lang " + Session.get("currentUserLang"));
        var curentLang =  Session.get("currentUserLang");

        console.log("curentLang " + curentLang);
        if (Session.equals("currentUserLang", curentLang))
            window.ParsleyValidator.setLocale(curentLang);
    });

}; 

我收到以下错误

edit_producer.js?639fc31a07a550f410d552dfe6242ac967371e3c:15 curentLang undefined debug.js:41 Tracker afterFlush函数的异常:错误:目录中没有undefined     在Object.f.setLocale

1 个答案:

答案 0 :(得分:0)

问题是get session返回未定义,我认为这是因为meteor在会话准备好之前呈现模板。

为了解决这个问题,我刚刚添加了

if(curentLang != undefined)
window.ParsleyValidator.setLocale(curentLang);