2014-12-21 3 views
2

아래 그림과 같이 Reactive-table을 사용하여 mye.js 앱에서 페이지가 매겨진 데이터를 표시하지만 Reactive-table에 표시된 데이터는 특정 사용자 이벤트 (클라이언트 선택 , 프로젝트, 날짜 범위 및 제출 버튼 클릭). 그래서 "submit form"이벤트에서 template.helpers >> myCollection 함수를 트리거 할 수 있는지 궁금합니다. 또는 사용자 (클라이언트, 프로젝트, 날짜 범위 선택)를 기반으로 사용자 쿼리에서 반환 된 데이터를 저장하는 전역 변수를 정의한 다음이 전역 변수를 myCollection 함수에서 반환하도록하는 것이 더 좋습니다.Meteor.js template.helpers 함수 대 전역 변수

필자는 template.events 이벤트에서 .helpers 함수를 호출하는 방법을 연구했지만 어떤 정보도 찾을 수 없었습니다. 따라서 어떤 접근법이 더 좋고 .events 함수를 호출하는 것이 더 나은 방법이라면 어떻게 할 것인가에 대해 높이 평가 될 것입니다. 감사.

Template.detailedreport.rendered = function() { 
    Session.set("dreport_customer", ""); 
    Session.set("dreport_project", ""); 
    Session.set("dreport_startDate", new Date()); 
    Session.set("dreport_endDate", new Date()); 

    $('.set-start-date').datetimepicker({ 
     pickTime: false, 
     defaultDate: new Date() 
    }); 
    $('.set-end-date').datetimepicker({ 
     pickTime: false, 
     defaultDate: new Date() 
    }); 

    $('.set-start-date').on("dp.change",function (e) { 
     Session.set("dreport_startDate", $('.set-start-date').data('DateTimePicker').getDate().toLocaleString()); 
    }); 
    $('.set-end-date').on("dp.change",function (e) { 
     Session.set("dreport_endDate", $('.set-end-date').data('DateTimePicker').getDate().toLocaleString()); 
    }); 
}; 

Template.detailedreport.helpers({ 
    customerslist: function() { 
     return Customers.find({}, {sort:{name: -1}});  
    }, 
    projectslist: function() { 
     return Projects.find({customerid: Session.get("dreport_customer")}, {sort:{title: -1}});  
    }, 
    myCollection: function() { 
     var now = Session.get("dreport_startDate"); 
     var then = Session.get("dreport_endDate"); 
     var custID = Session.get("dreport_customer"); 
     var projID = Session.get("dreport_project"); 
      Meteor.call('logSummary', now, then, projID, custID, function(error, data){ 
      if(error) 
       return alert(error.reason); 
      return data; 
      });   
     } 
    },  
    settings: function() { 
     return { 
      rowsPerPage: 10, 
      showFilter: true, 
      showColumnToggles: false, 
      fields: [ 
       { key: '0._id.day', label: 'Day' }, 
       { key: '0.totalhours', label: 'Hours Spent'}       
      ] 
     }; 
    } 

}); 

Template.detailedreport.events({ 
    'submit form': function(e) { 
     e.preventDefault(); 
     var now = $('.set-start-date').data('DateTimePicker').getDate().toLocaleString(); 
     var then = $('.set-end-date').data('DateTimePicker').getDate().toLocaleString(); 
     var custID = $(e.target).find('[name=customer]').val(); 
     var projID = $(e.target).find('[name=project]').val(); 
     //Here is the problem as I am not sure how to refresh myCollection function in .helpers 
    }, 
    'change #customer': function(e){ 
     Session.set("dreport_project", ""); 
    Session.set("dreport_customer", e.currentTarget.value); 
    }, 
    'change #project': function(e){ 
    Session.set("dreport_project", e.currentTarget.value); 
    } 
}); 



Template: 

    <div> 
     {{> reactiveTable class="table table-bordered table-hover" collection=myCollection settings=settings}} 
    </div> 




Server: 

Meteor.methods({ 
    logSummary: function(startDate, endDate, projid, custid){ 
    //Left without filtering based on date, proj, cust for testing only... 
    return Storylog.find({}); 
    } 
}); 

답변

1

템플릿 헬퍼 종속성이 변경되면 그들은 다시 계산된다는 것을 의미 반응성 : 아래

내가 내 응용 프로그램에있는 코드입니다. 따라서 종속성을 업데이트 한 다음 myCollection 도우미를 다시 계산하면됩니다.

의견 // Here is the problem...으로 대체합니다 :

Session.set('dreport_endDate', then); 
Session.set('dreport_startDate', now); 
Session.set('dreport_project', projID); 
Session.set('dreport_customer', custID); 
+0

덕분에 많이, 매우 감사 – MKM

관련 문제