我一直在摸索为什么这段代码在某些时候会起作用,但不是全部(或至少在大多数情况下)。我发现它确实有时会在浏览器中显示正确的内容,但奇怪的是,有几天我会回到相同的代码,运行服务器(正常)并加载页面将在控制台中收到错误: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;
}
});