5

Web ページを別の Web ページに移動すると、Meteor がセッションの値を保持できなくなるという問題に直面しています。私はMeteorを初めて使用しています。おそらく私は誤用しています。ページ間でセッションの値を処理するにはどうすればよいですか? ページが別のページに移動したり、ブラウザがリロードされたりしても、セッションの値を保持したい。

Meteor、Mojito、Express (Node.js) などの Javascript フレームワークを使用して Web アプリケーションを作成し、開発前にテストする予定です。

Meteor バージョン 0.5.2 (6635ae1007) と Chrome バージョン 23.0.1271.95 を使用しています。

テストコードとテストの手順は次のとおりです。

(1) [テスト] ボタンをクリックします。

これにより、「Result is」ラベルが「Result is OK」に変更されます。

(2) [トップページに戻る] リンクをクリックするか、ブラウザをリロードします。

「結果はOK」というラベルを保持したいのですが、「結果は」に戻ってしまいます。セッション値が定義されていないことを意味します。

test.js

if (Meteor.isClient) {
  Template.test.result = function() {
    var result = Session.get('TEST');
    console.log('Result: %s', result);
    return result;
  }

  Template.test.events({
    'click' : function() {
        Session.set('TEST', 'OK');
    }
  });
}

test.html

<head>
  <title>sample-session</title>
</head>

<body>
  <h1>Session Test</h1>
  <a href="./">Back to Top page<a/><br/>
  {{> test}}
</body>

<template name="test">
  <input type="button" value="TEST"></input><br/>
  Result is {{result}}.
</template>
4

1 に答える 1

8

UPDATE Meteor には、期待どおりのことを行うSession.setDefaultメソッドが追加されました。

以下の元の回答

sessionmeteorのオブジェクトは、他のフレームワーク (Rails/ASP.NET MVC/PHP)の概念とは根本的に異なりsessionます。Meteor の主な機能は、クライアント側コードのリアクティブ変数として機能することです。

上記で期待していることを実行するようには設計されていません。リンクが起動するとすぐに、クライアント コンテキストが消去され、クライアント側のセッション値が失われます。Meteor アプリは、従来の意味でのナビゲーション用に設計されていないため、これが非常に混乱しているように見えます。それは完全に理解できます:)

従来の意味でナビゲーションにアプローチする代わりに、 meteor-routerを検討することをお勧めします。これは、従来のアプローチとより流星のようなアプローチの間の移行を容易にするのに役立ちます。

上記の方法でデータを永続化する必要がある場合は、クライアントでローカルにデータを永続化するために、 amplify スマート パッケージを検討する必要があります。

ヒント:ドキュメントでMeteor について学習する際は、各セグメントの右上にあるクライアント/サーバー/任意の場所の指定に細心の注意を払ってください。

于 2012-12-07T01:58:54.320 に答える