我一直在摸不着头脑,为什么这段代码在某些时候可以工作,但不是全部(或至少在大部分时间)。我发现它有时确实会在浏览器中显示正确的内容,但奇怪的是,有时我会回到相同的代码,运行服务器(按照正常情况)并在加载时页面将在控制台中收到错误:TypeError: 'undefined' is not an object (evaluating 'Session.get('x').html')
(当我收到该错误时,控制台中的下一行有时会显示 Error
- 引用 err
对象,而其他时候它会显示读取Object
- 引用data
对象!?)。
我显然遗漏了 Meteor 中的 Session 变量的一些内容,并且一定是误用了它们?希望有经验的人能给我指出正确的方向。
提前感谢您的帮助!
这是我的虚拟代码:
/client/del.html
<head>
<title>del</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
Hello World!
<div class="helloButton">{{{greeting}}}</div>
</template>
我的客户端 JavaScript 文件是:
/client/del.js
Meteor.call('foo', 300, function(err, data) {
err ? console.log(err) : console.log(data);
Session.set('x', data);
});
Template.hello.events = {
'click div.helloButton' : function(evt) {
if ( Session.get('x').answer.toString() === evt.target.innerHTML ) {
console.log('yay!');
}
}
};
Template.hello.greeting = function() {
return Session.get('x').html;
};
我的服务器端 JavaScript 是:
/server/svr.js
Meteor.methods({
doubled: function(num) {
return num * 2;
},
foo: function(lmt) {
var count = lmt,
result = {};
for ( var i = 0; i < lmt; i++ ) {
count++;
}
count = Meteor.call('doubled', count);
result.html = "<em>" + count + "</em>";
result.answer = count;
return result;
}
});
最佳答案
我认为这只是客户端第一次启动时 session 变量还没有设置。因此 Session.get('x')
将返回 undefined
直到您的方法调用 (foo
) 返回,这几乎肯定不会发生在之前模板首先绘制。
但是之后它将在 session 中,因此刷新后事情可能会正常运行。
答案是在尝试访问变量之前检查它是否未定义
。例如:
Template.hello.greeting = function() {
if (Session.get('x')) return Session.get('x').html;
};
关于meteor - Meteor 中 session 变量的零星行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858989/