2017-03-03 10 views
4

私は2ページ、fila.jsretirada.jsを持っています。流星セッションオブジェクトが反応しない

fila.jsにはatualizarChamadasというファンクションがあり、retirada.jsにエクスポートします。

fila.jsから関数を呼び出すと、正常に動作しますが、retirada.jsで呼び出すと、セッションオブジェクトまたはreactive-varはヘルパーで反応的に機能しません。 fila.jsである

My機能:

export default function atualizarChamadas() { 
    let chamadas = Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch(); 
    //Session.set("chamadas", chamadas); 
    ChamadasReactive.set(chamadas); 
} 

マイテンプレートヘルパーfila.js

Template.fila.helpers({ 
    chamadasAtendimento: function() { 
     //return Session.get("chamadas"); 
     return ChamadasReactive.get().filter((el)=>{ 
      return el.status == 'A'; 
     }).slice(0,11); 
     } 
}); 

Template.fila.helpers({ 
    chamadasEspera: function() { 
     //return Session.get("chamadas"); 

     return ChamadasReactive.get().filter((el)=>{ 
      return el.status == 'E'; 
     }).slice(0, 11); 
     } 
}); 

Template.fila.helpers({ 
    chamadasFinalizada: function() { 
     return ChamadasReactive.get().filter((el)=>{ 
      return el.status == 'F'; 
     }).slice(0, 11); 
     } 
}); 

私は関数を呼び出すと、それが正常に動作します:私はこの炎を持っている

Template.fila.events({ 
     "submit form": function (e, template){ 
      e.preventDefault(); 
      atualizarChamadas(); 
     } 

}); 

関数が呼び出されたときにうまく動作するテンプレートfila.js

<tbody> 
     {{#each chamada in chamadasEspera}} 
      <tr class="success"> 
       <td>{{chamada.senha}}</td> 
       <td>{{chamada.data_inicio}}</td> 
       <td></td> 
       <td> 
        <select id="{{chamada._id}}" class="form-control"> 
         <option value="E">Esperando</option> 
         <option value="A">Atendimento</option> 
         <option value="F">Finalizado</option> 
        </select> 
       </td> 
       <td><button id="{{chamada._id}}" value="{{chamada.senha}}" name="{{chamada.status}}" class="btn btn-block">Chamar</button></td> 

      </tr> 
     {{/each}} 
    </tbody> 


    <br/> 

    <tbody> 
    {{#each chamada in chamadasAtendimento}} 
      <tr class="danger"> 
       <td>{{chamada.senha}}</td> 
       <td>{{chamada.data_inicio}}</td> 
       <td></td> 
       <td> 
        <select id="{{chamada._id}}" class="form-control"> 
         <option value="A">Atendimento</option> 
         <option value="E">Esperando</option> 
         <option value="F">Finalizado</option> 
        </select> 
       </td> 
       <td><button id="{{chamada._id}}" value="{{chamada.senha}}" name="{{chamada.status}}" class="btn btn-block">Chamar</button></td> 
      </tr> 
    {{/each}} 
    </tbody> 

    <br/> 
    <tbody> 
    {{#each chamada in chamadasFinalizada}} 
     <tr class="info"> 
      <td>{{chamada.senha}}</td> 
      <td>{{chamada.data_inicio}}</td> 
      <td>{{chamada.data_fim}}</td> 
      <td> 
       <select id="{{chamada._id}}" class="form-control"> 
        <option value="F">Finalizada</option> 
        <option value="E">Esperando</option> 
        <option value="A">Atendimento</option> 
       </select> 
      </td> 
      <td></td> 
     </tr> 
    {{/each}} 
    </tbody> 
    </table> 
    {{/if}} 

私のページretirada.jsでは、私はatualizarChamadasを呼び出して、このコードを持っているが、それは反応的に動作しません:console.logが呼び出されると

Template.retirada.events({ 
    "click button": function(e,template){ 
     let newPass = e.target.id, 
      id = Retirada.find({}).fetch()[0]._id; 

     console.log('01:' + Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch().length); 

     Retirada.update(id, {count: newPass}); 
     Chamadas.insert(
      {senha: newPass, status : 'E', data_inicio: new Date(), medico: 1}); 

     console.log('02:' + Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch().length); 

     setTimeout (teste, 1000); 

     function teste(){ 
      atualizarChamadas(); 
     } 
    } 
    }); 

が、私はのオブジェクト結果の長さを見ることができます私のテンプレートは新しいデータをリフレッシュしません。私は文書を変更するためのメソッドを使用しましたが、ビューで行うために変更しましたが、まだ動作しません。

私は助けが必要です。

答えて

0

私は、この問題はイベントハンドラの中でMeteorコールを使うことから来ていると思います。リアクティブメソッド呼び出しを可能にする代替パッケージがいくつかあります:meteor-reactive-methodmnmtanish:call

+0

私が呼び出すために使用方法を停止し、今私は、ビュー上で直接Mongoのドキュメントを変更するが、それはまだ私は、一般的に流星の呼び出しでjQueryを使って直接ビューを変更することにより、これらの問題を回避得ている –

+0

動作しません。私は私の答えを更新します。 – mutdmour

+1

ちょうどあなたがコードを変更したことに気づいた。 Iron Routerを使用していますか?カーソル(Chamadas.find()をルートのデータの一部として返すことができます)。これはかなり確実に機能します。フィルタが必要な場合、Session変数はIron Routerのデータコンテキスト内で動作します。あなたがこれを行う方法の詳細が必要な場合は私に教えてください。セキュリティ上の理由から、Meteorコールはサーバー側で使用し、クライアント側から挿入/更新/削除操作をブロックする必要があります。 – mutdmour

0

私はこのコードブロックで問題を解決しました。私は、コレクションが変更されるたびに、ヘルパーのリターンと反応性でコレクションを直接使用しました。

Template.fila.helpers({ 
    chamadasAtendimento: function() { 
     //return Session.get("chamadas"); 
     return Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch().filter((el)=>{ 
      return el.status == 'A'; 
     }).slice(0,11); 
     } 
}); 

Template.fila.helpers({ 
    chamadasEspera: function() { 
     return Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch().filter((el)=>{ 
      return el.status == 'E'; 
     }).slice(0, 11); 
     } 
}); 

Template.fila.helpers({ 
    chamadasFinalizada: function() { 
     return Chamadas.find({medico: 1},{sort: {data_inicio: -1}}).fetch().filter((el)=>{ 
      return el.status == 'F'; 
     }).slice(0, 11); 
     } 
}); 
関連する問題