2017-02-14 4 views
0

私の流星プロジェクトでは、私は流星オブジェクトを取得し、htmlでiterateしようとしています。htmlの中の流星オブジェクトを受け取ることができません

次のように私のhtmlコードは次のとおりです。

client.jsにヘルパークラスを作成し
<ul> 
    {{#each userTerritory myObject}} 
    <li class="">{{myObject.name}}</li> 
    {{/each}} 
    </ul> 

と、次のように私はモンゴデシベル

Template.dash_board_content1.helpers({ 

     'userTerritory': function(){ 

     Meteor.call('userTerritoryList',function(error,result){ 
      console.log(result); 
      if(!error){ 

      return result; 

        }else{ 
      alert("error : " + error); 
      } 

     }); 
     } 
    }); 

メソッドからオブジェクトを取得するメソッドの呼び出しをしていますserver.js内の次のようになります。

in server.js 

'userTerritoryList': function(){ 
    console.log("testing"); 
    return Country.find().fetch();; 
} 
+0

なぜパブリッシュ/サブスクライブではなくMeteorメソッドコールをここで呼び出せますか? – zim

+0

@zimメソッドの使用は、セキュリティに関するより良いアプローチと考えられます。メソッドを使用し、信頼性、役割などのチェックを実装することは、何度も勧められてきました。 – Jankapunkt

+0

私はMeteorのメソッドとクライアントサイドの書き込みについて考えていると思います。 pub/subは安全で、imhoはメソッド呼び出しよりもあなたの問題に適しています。 – zim

答えて

0

メテオールメソッドは、デフォルトでBlazeのヘルパーでは機能しません。彼らはあなたがこのパッケージを使用することができます一緒に動作します:meteor-reactive-method

Template.dash_board_content1.helpers({ 
    userTerritory: function(){ 
    return ReactiveMethod.call('userTerritoryList'); 
    } 
}); 
0

編集を:@zimが指摘したように、あなたはむしろ流星の出版物およびサブスクリプション機能を使用することができます。これはあなたの記述された問題に対する最良の解決策になります。

さらに読む上:https://guide.meteor.com/data-loading.html

あなたはまだあなたのサーバー側の呼び出しを使用してに依存している場合@Khangが指摘したように、あなたは、どちらかの反応方法パッケージを使用することができます。次に、あなたが)(Template.instanceを経由して反応性辞書にアクセスすることができます

import {Template} from 'meteor/templating'; 
import {ReactiveDict} from 'meteor/reactive-dict'; 

// create a new reactive dictionary to store reactive variables 
// let's call it state 
Template.dash_board_content1.onCreated(function onCreated(){ 

    //this refers to the Template.instance() here 
    this.state = new ReactiveDict(); 

    //initial value of userTerritoryList is null 
    //it will return nothing until it has been changed 
    this.state.set('userTerritoryList', null); 
    //you can even set an errors variable 
    this.state.set('errors', []); 
}); 

Template.dash_board_content1.helpers({ 

    'userTerritory': function(){ 
     const territoryList = Template.instance().state.get('userTerritoryList'); 

     if (territoryList) return territoryList; 

     Meteor.call('userTerritoryList', function(error,result){ 
      if(!error){ 
       Template.instance().state.set('userTerritoryList', result); 
      } else { 
       const errs = Template.instance().state.get('errors'); 
       errs.push(error); 
       //update errors 
       Template.instance().state.set('errors', errs); 
      } 
     }); 
    }, 

    'getErrors' : function() { 
     //use in your template to display multiple err messages 
     return Template.instance().state.get('errors'); 
    }, 
}); 

useTerritoryを、あなたの結果の値について、より詳細なアクセス権を持っているしたい場合は、反応性のdictを使用する必要がありますヘルパーは設定されていない場合にのみMeteor.callを使用します。それでも、メソッドを簡単に変更できるので、メソッドを常に呼び出すことができます。

これにより、さらに細かいエラー処理を実装できることに注意してください。

+0

imhoヘルパーは非同期であってはいけません。メソッド呼び出しをonCreated()のautorun()の中に置き、ヘルパーが反応変数の内容を返すようにしましょう。 – zim

+0

それもできます。私はこのアプローチが私のオートランが大きすぎることを防ぐために好む。これは、すべての反応変数関連のコードが適切に配置されているとデバッグするのがずっと簡単です。 – Jankapunkt

関連する問題