【问题标题】:Meteor Session defined and then all the sudden undefinedMeteor Session 定义然后突然 undefined
【发布时间】:2014-12-12 21:46:51
【问题描述】:

升级到 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:15curentLang 未定义 debug.js:41 来自 Tracker afterFlush 函数的异常:错误:未定义在目录中不可用 在 Object.f.setLocale

【问题讨论】:

  • 我认为不是undefined 的会话,我认为异常来自window.ParsleyValidator.setLocale(curentLang)。但是,我没有经验。
  • curentLang var 未定义,因为它没有从返回未定义的会话获取中获取

标签: meteor iron-router


【解决方案1】:

问题在于获取会话返回未定义,我认为这是因为流星在会话准备好之前呈现模板。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    相关资源
    最近更新 更多