2

この質問は、すでにここにある質問とは異なると思います。私はこれに苦労しており、良い解決策を見つけることができません。

次のように仮定します。

//ResourceOne { name: "foobar" } ... ResourceTwo { name: "donuts" }
Resources = new Meteor.Collection('resources');

//{ input: ResourceOneID, output: ResourceTwoID }
Connections = new Meteor.Collection('connections');

接続はリソースを他のリソースに接続し、それら_idの のみを保存します。

Connections の一覧をフォームに表示したい

foobar --> donuts

どうやってそれを行うのですか?

今私は持っています:

{{#each connections}}
    <a href="#">{{ input_name }} --> {{ output_name }}</a>
{{/each}}

これはテンプレート ヘルパーによって強化されています。

input_name: function() {
    return Resources.find( { _id: this.input } ).fetch()[0].name;
}

これは機能しますが、ページが完全に更新されていない場合は常に失敗します。

これを行うためのより良い方法は何ですか?

4

1 に答える 1

2

これはおそらく、データが完全に到着するのを待っていないためです。これを実行すると

Resources.find( { _id: this.input } ).fetch()[0].name;

あなたはそれResoureces.find(..).fetch()[0]が結果をもたらすと仮定していますが、これは常にそうであるとは限りません. ページが最初にロードされるとき、データがまだブラウザに到着していない可能性があり、結果はnull. 属性をチェックするnameと、例外がスローされます。

このケースを処理するだけで機能します。

var resource = Resources.findOne( { _id: this.input } );
return resource && resource.name;

注:findOne()と同じ.fetch()[0]です。

したがって、ここではnullの場合にresource戻りnull、そのname属性をチェックしません。

于 2014-06-24T23:37:05.233 に答える