私は meteor を学習して、1 つのコレクション (のセット) から情報を取得する簡単なアプリを作成し、そのコレクションから返されたもの (アイテム、名前、アイテム ID の大きなリスト) に基づいて、別のコレクションでルックアップを行います。アイテム名私の考えでは、アイテム コレクションは大きく、クライアントが直接アクセスする必要がないため、サーバー上でのみ公開されるというものでした。
コールバックを正しく処理したとは思わないことを除いて、多かれ少なかれすべてが機能します。これが私が書いた簡単なテストです。アイテムの名前を渡すテンプレート:
Template.operations.getTypeID = function(name) {
result = "";
console.log("Precall Logging name: ", name);
console.log("Precall Logging result: ", result);
result = Meteor.call('getID', name, function (error, result) {
console.log("Async Logging in call: result: ", result);
});
console.log("Name is now", name);
console.log("Result is now", result);
return name;
}
これは、最終的に名前に基づいて ID を検索するサーバー上のメソッドです。
Meteor.methods({
getID: function(itemName) {
result = itemName + "_changed";
console.log("server: getID result:", result);
return result;
}
});
HTML ファイルでテンプレートを呼び出す場所は次のとおりです。
<td>{{getTypeID name}}</td>
アプリを使用していると、メソッド getID が非同期のように呼び出されることがわかります。getID メソッドの結果は変更され、テンプレート内の他のエントリの後にコンソールに書き込まれます。コールバックで返された結果をテンプレートで使用できるように設定し、クライアントに返してページでレンダリングできるようにするにはどうすればよいですか?
更新:編集を行った後の console.log 出力は次のとおりです。
Precall Logging name: Apples lootlog.js:79
Precall Logging result: lootlog.js:80
Name is now Apples lootlog.js:86
Result is now undefined lootlog.js:87
Precall Logging name: Oranges lootlog.js:79
Precall Logging result: lootlog.js:80
Name is now Oranges lootlog.js:86
Result is now undefined lootlog.js:87
Precall Logging name: Melons lootlog.js:79
Precall Logging result: lootlog.js:80
Name is now Melons lootlog.js:86
Result is now undefined lootlog.js:87
Precall Logging name: Grapes lootlog.js:79
Precall Logging result: lootlog.js:80
Name is now Grapes lootlog.js:86
Result is now undefined lootlog.js:87
Precall Logging name: Onion lootlog.js:79
Precall Logging result: lootlog.js:80
Name is now Onion lootlog.js:86
Result is now undefined lootlog.js:87
Async Logging in call: result: Apples_changed lootlog.js:83
Async Logging in call: result: Oranges_changed lootlog.js:83
Async Logging in call: result: Melons_changed lootlog.js:83
Async Logging in call: result: Grapes_changed lootlog.js:83
Async Logging in call: result: Onion_changed
以下は、Meteor コンソールに表示される内容です。
server: getID Name: Apples
server: getID result: Apples_changed
server: getID Name: Oranges
server: getID result: Oranges_changed
server: getID Name: Melons
server: getID result: Melons_changed
server: getID Name: Grapes
server: getID result: Grapes_changed
server: getID Name: Onion
server: getID result: Onion_changed