0

私は MongoDb に書き込む「バックエンド」アプリケーションを持っています (データベースには _id: with ObjectId("13f6ea...002") があります) メテオアプリを使用して情報を表示します。すべてが良かった {{#each}} で情報のリストを表示します。しかし、「_Id」で 1 つの要素を表示したい場合、何も機能しません。

この問題を読み、正しいルートを取得するようにコードを調整しましたが、ページに何も表示できません。テンプレート ヘルパーを作成しようとしましたが、役に立ちませんでした

データベース レコード:

  {
 _id: ObjectId("13f6ea...002"),
 url: "foo",
 title: "bar",
 published: "2014-08-22 03:26:21 UTC",
 image: "foo.jpg",
 summary: "foo ",
 categories: [
   "F",
   "B"
  ],
  ...
  }

ルート:

this.route('news', {
path: '/news/:_id',
template: 'news',
waitOn: function () { 
  var id = this._id; 
  Meteor.subscribe('news', id);
},
data: function() {
  var id = this.params._id;
  return News.findOne({ _id: Meteor.Collection.ObjectID(this.params._id)});
},
 action : function () {this.render();},
});

公開

Meteor.publish('news', function(id) {
  return News.find({_id: id}); 
});

固有の投稿にリダイレクトするテンプレート

<h4><a href="{{pathFor 'news' _id=this._id.toHexString}}">{{title}}</a></h4>

そしてテンプレートはただの{{ニュース}}です

どうすればこれを修正できますか?


アップデート

それを修正するための私の解決策:

router.js

waitOn: function () {
  var id = this._id;
  Meteor.subscribe('News', id);
},
data: function() {
  return News.findOne(new Meteor.Collection.ObjectID(this.params._id));
},

そしてテンプレで

<a href="news/{{_id._str}}">

4

2 に答える 2

1

ブラウザで適切な URL (つまりlocalhost:3000/news/[_id]) に移動し、コンソールを開いて次のように入力します。

Router.current().data()

これにより、現在のルートのデータ コンテキストが表示されます。何も返さない場合は、何も返さないためNews.findOneクエリに根本的な問題があるか、必要なドキュメントが返される可能性が高くなります。

後者の場合、私が見る限り、newsそのドキュメント内にプロパティがないため、何もレンダリングされません。に変更{{news}}する{{url}}{{summary}}、要求されたプロパティをレンダリングすると思います。

ドキュメント全体をレンダリングしようとしている場合{{news}}は、( のようなものとしてレンダリングされるという事実は別として)データ関数によって返されるオブジェクトのプロパティ[Object]を作成する必要があります。news

return {
    news: News.findOne({ _id: Meteor.Collection.ObjectID(this.params._id)});
};
于 2014-09-10T10:51:28.857 に答える
0

_id でドキュメントを取得する: イベントの下の .js ファイルで、Say on click イベントと Collection EventList :-

    'Submit form' : function () {
        var id = this._id;      
        return EventList.find({_id : id}).fetch();
    }

これにより、id のオブジェクトが返されます。私の場合、コレクション内のすべてのドキュメントのフィールドを表示しています。ユーザーがレコードを選択して [送信] をクリックすると、すべてのドキュメント フィールドが取得され、ユーザーに表示されます。

于 2015-02-15T19:58:06.073 に答える