私は、なぜこのコードが時々機能するのか、すべてではなく (または少なくともほとんどの場合) 機能するのかについて頭を悩ませてきました。実際にブラウザで正しいコンテンツを表示することが時々あることがわかりましたが、奇妙なことに、同じコードに戻ってサーバーを実行し(通常どおり)、ページはコンソールでエラーを受け取ります:TypeError: 'undefined' is not an object (evaluating 'Session.get('x').html')
(そのエラーを受け取ると、コンソールの次の行がオブジェクトError
を参照する場合と、オブジェクトを参照する場合があります!?)。err
Object
data
Meteor のセッション変数について明らかに何かが欠けていて、それらを誤用しているに違いありませんか? 経験のある人が私を正しい方向に向けてくれることを願っています。
事前に助けてくれてありがとう!
ここに私のダミーコードがあります:
/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;
}
});