아래 그림과 같이 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({});
}
});
덕분에 많이, 매우 감사 – MKM