3

MeteorJS アプリで BackboneJS を使用してルーターを実装しようとしています。URL 'localhost:3000/1' を呼び出すと、私のルーターは ID '1' をセッションに保存します。その後、セッションから ID を取得し、それをクエリで使用して、コレクションからオブジェクトを選択します。しかし、クエリでセッション属性を使用しようとすると、失敗します。したがって、MeteorJS を使用してルーティングするためのより良い方法があるかどうか、およびクエリが失敗する理由を知りたいです。

test.js

Meteor.subscribe("test");

Test = new Meteor.Collection("test");

Session.set("id", null);

Template.hello.test = function () {
  var avg = 0, total = 0, cursor = Test.find(), count = cursor.count();
  cursor.forEach(function(e)
  {
    total += e.number;
  });
  avg = total / count;

  var session_id = Session.get("id");

  var test = Test.findOne({id: session_id}); //doesn't work
  if (test) {
    test.avg = avg;
  }

  return test;
}

//ROUTER
var TestRouter = Backbone.Router.extend({
  routes: {
    ":get_id":    "get_id" 
  },
  get_id: function (get_id) {
    Session.set("id", get_id);
    console.log(get_id);
  }
});

Router = new TestRouter;

Meteor.startup(function () {
  Backbone.history.start({pushState: true});
});

test.html

<head>
  <title>test</title>
</head>

<body>
  {{> hello}}
</body>

<template name="hello">
  <h1>Hello World!</h1>
  {{#if test}}
    {{#with test}}
      ID: {{id}}  Name: {{name}}  AVG: {{avg}}
    {{/with}}
  {{/if}}
</template>

model.js

Test = new Meteor.Collection("test");

Test.remove({});

if (Test.find().count() < 1) 
{
    Test.insert({id: 1,
                 name: "test1",
                 number: 13});

    Test.insert({id: 2,
                 name: "test2",
                 number: 75});
}

Meteor.publish('test', function () {
  return Test.find();
});
4

3 に答える 3

3

コードをデバッグすると、コレクションの 'id' が整数で、session_id が文字列であることがわかりました。session_id を変換するには parseInt が必要です。

ルーティングにはpage.jsを使用します。これは、「TJ Holowaychuk」の優れた作品である「Express ルーターに触発されたマイクロ クライアント側ルーター」です。

Meteor とバックボーンは Model/Collection & View/Template でいくつかの機能の競合があるため、強くお勧めします。

于 2012-07-13T02:56:49.727 に答える
0

Jifeng は、ルーティング機能のみが必要な場合は page.js で十分であるという意味で正しかったです。

ジフェンと私は同じチームです。最近まで、「Meteor と Backbone は Model/Collection & View/Template でいくつかの機能衝突がある」という結論を出していました。Meteor と Backbone の両方に関する理解が深まるにつれて、その結論は再評価する必要があります。私の最後の実験コードをBBCloneMail-on-Meteorとして参照してください: Meteor で実行するように変更された Derick Bailey の BBCloneMail。重要なのは、バックボーン ストレージ プラグインを実装して、Meteor のコレクションに接続することです。プラグインの配線が有効になったら、必要な変更はわずかです。

于 2012-08-05T12:35:28.273 に答える
0

興味のある鉄のルーターを見つけるかもしれません - それは流星特有のものであり、「あなたのサブスクリプション、データソースについて知っていて、一般的な問題の世話をするのに役立ちます」: https://github.com/EventedMind/iron-router

于 2013-10-10T12:03:34.293 に答える