2017-04-17 10 views
0

私はMeteorでファイルブラウザを実装しようとしています。ユーザーは、いくつかのネットワークフォルダを経由して、後で処理するためにコレクションに追加することができます。コールバックからのフィードヘルパー

これは、特定のディレクトリ

<template name="folderBrowser"> 
    <ul> 
    <li class="js-browseUp">..</li> 
    {{#each folder}} 
    <li class="js-selectFolder">{{.}}</li> 
    {{/each}} 
    </ul> 
</template> 

サーバーメソッドからの私の単純な表示テンプレート「..」とフォルダは、フォルダの内容

'displayFolderContent'(folderName) { 
    var folders = fs.readdirSync(folderName) 
    console.log(folderName +':'+ folders); 
    return folders; 
} 

そして、私の試み(動作しない)を取得することです。私はヘルパーに関数を渡していると信じていますが、メソッドは非同期なので、直接 "d"を渡すことはできませんが、これを解決する方法はわかりません。

Template.folderBrowser.helpers({ 
    folder: function() { 
    Meteor.call('displayFolderContent', myFolder, function(e, d) { 
     console.log(d); // logs an array of folder content correctly into browser console 
     return d; 
    }); 
    } 
}); 

答えて

1

テンプレートヘルパーで流星法を使用することをお勧めします。

簡単な解決策は、中間のReactiveVarを使用することです。テンプレートが作成されたら、メソッド呼び出しを行い、コールバックのReactiveVarを更新します。その後、folderヘルパーで、ReactiveVarのコンテンツを返すだけです。

Meteorは、メソッドが非同期的に戻るときに反応的に更新されます。

+0

は、ヘルパーからメソッドを呼び出すことは間違いありません。 OP、これは正しい解決策です。 – zim

+0

私はその点を数時間後にも得ました。 ReactiveVarとReactiveArrayパッケージを使用しています。よく働く! –

関連する問題