升级到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
答案 0 :(得分:0)
问题是get session返回未定义,我认为这是因为meteor在会话准备好之前呈现模板。
为了解决这个问题,我刚刚添加了
if(curentLang != undefined)
window.ParsleyValidator.setLocale(curentLang);