2016-03-30 2 views
1

からのデータIは、コードのIM流星テンプレート・マネージャのような部分を有する:。アクセス流星Template.instance()メソッドの呼び出しコールバック

"click #refuse": function() { 
Meteor.call("removeUserFromEvent", this._id, Meteor.userId()); 
if (Template.instance().data.participants.length === Template.instance().data.orderedParticipants.length) { 
    Meteor.call("updateEventStatus", this._id, "ordered"); 
} 
Router.go("/"); 

}

私はたいはif(...){...}ものがで実行されることを確認しますMeteor.call(...)

"click #refuse": function() { 
Meteor.call("removeUserFromEvent", this._id, Meteor.userId(), function(){ 
    if (Template.instance().data.participants.length === Template.instance().data.orderedParticipants.length) { 
    Meteor.call("updateEventStatus", this._id, "ordered"); 
} 
}); 
Router.go("/"); 
} 

のようなコールバック、しかし、私はこれを行うにしようとした場合には、そのコールバックの内側にTemplate.instance()はを返すことが判明、テンプレートからデータを取得できません。

メソッドコールバックでこのようなものを入れてもいいですか(つまり、いくつかの現在の状態パラメータを取得し、それらの呼び出しに応じて、別のメソッドを呼び出しません)。たぶん、Template.instance()。データが状態パラメータを格納するための間違った場所ですか? Template.instance.dataは全く反応しますか?多分、私はこのような機能がコールバックに存在することを可能にするためにアーキテクチャを何とか変更するべきでしょうか?

"click #refuse": function(evt,tmp) { 
    // get and cache your template data context references; 
    var participants = tmp.data.participants; 
    var orderedParticipants = tmp.data.orderedParticipants; 

    // this._id is not reliable, you should use Blaze.getData() on the event target 
    var _id = Blaze.getData(event.currentTarget)._id; 

    var userId = Meteor.userId(); 

    // make sure your callback function accepts error and result 
    Meteor.call("removeUserFromEvent", _id, userId, function(err,res) { 

    if (err) {/* handle error */} 

    if (res) { 

     if (participants.length === orderedParticipants.length) { 

     Meteor.call("updateEventStatus", _id, "ordered", function(err,res) { 

      if (err) {/* handle error */} 

      if (res) { 
      // perhaps you would like to redirect to home after successful operation only 
      Router.go("/"); 
      } 

     }); 
     } 

    } 

    }); 

} 

PS:あなたがしたいことがありので、あまりにも多くのコールバックは、ここにありますので、あなたのコードのように改訂することができ'event target': function(event, template) {}のようにイベントハンドラとイベントハンドラ関数は、パラメータとしてイベントやテンプレートを受け入れるだ

答えて

1

このコードを単純化する約束を見てください。