Meteor는 목록에서 항목을 선택한 후 템플릿 만 트리거합니다
-
21-12-2019 - |
문제
목록보기가있는 전형적인 시나리오가 있고 세부 정보보기가 있습니다.목록 항목을 선택하여 세부 정보보기에 도달합니다.당연히 기록에 데이터가 세부 사항의 레이아웃보기에 알립니다.내가 보는 것은 subtemplate의 도우미 기능이 나열 뷰 렌더링 중에 너무 빨리 호출되는 것입니다 (목록보기 렌더링 중).또한 목록에서 항목을 클릭 할 때 호출되지 않습니다.내가 도대체 뭘 잘못하고있는 겁니까?JQM 1.4.3으로 Meteor 0.8.2를 사용하고 있습니다.
HTML은 다음과 같습니다.
<!-- details page -->
<div data-role="page" data-theme="q" id="listdetail">
<div data-role="header" data-position="fixed">
<a data-rel="back" href="#" data-transition="slideleft" class="baack fa fa-arrow-left"></a>
<div id="detailTitle" class="headertitle"></div>
</div>
<!-- /header -->
<div data-role="content" class="ma-req-detail" id="details">
{{> qDetails}}
</div>
</div>
<!-- /details page -->
<template name="qList">
{{#each items}}
{{>qListItems}}
{{/each}}
</template>
<template name="qListItems">
<li>
<div id="msg-container-{{requestId}}" class="processing-msg">
<a href="#" data-rel="back" data-role="button" data-iconpos="notext" class="ui-btn-right msg-dismiss"><i class="fa fa-2x fa-times-circle"></i></a>
<p class="msg-text-{{requestId}}">Action pending...</p>
</div>
<a id="requestId" href="#listdetail" data-name="{{additionalProperties}}" data-transition="slide" class="{{#if isProcessing}}ui-disabled{{/if}}">
<p class="requestor">{{additionalProperties.requestedForUid}}</p>
<p class="description">week of {{additionalProperties.workWeekOf}}</p>
<p class="reqdate">total hours: </p>
</a>
</li>
</template>
<template name="qDetails" >
<div role="main" class="q-details">
<div data-role="navbar" class="week-nav">
<ul>
{{#each days}}
{{>navElements}}
{{/each}}
</ul>
</div>
</div>
<div class="ma-buttons ui-fieldcontain ui-footer-fixed">
<div data-role="controlgroup" data-type="horizontal" class="" data-position-fixed="true" data-position="bottom">
<a data-mini="true" href="#" id="approve-request"
class="ui-btn ui-btn-c ui-corner-r ui-icon-check ui-btn-icon-left ma-btn approve">Approve</a>
</div>
</div>
</template>
<template name="navElements">
<li><a id="{{day}}Nav" href="#{{day}}">{{day}}<br><span class="digital-date">{{date}}</span></a></li>
</template>
.
JS 비트는 다음과 같습니다 :
Template.qDetails.rendered = function() {
$('#details').trigger('create');
};
Template.qDetails.helpers({
days: function() {
//TODO need a way to delay this function to call when details template is shown
var dt = Session.get("record").additionalProperties.workWeekOf;
var days = [];
var weekday = new Array(7);
weekday[0] = "SAT";
weekday[1] = "SUN";
weekday[2] = "MON";
weekday[3] = "TUE";
weekday[4] = "WED";
weekday[5] = "THU";
weekday[6] = "FRI";
var dtVal = dt.getDate();
for (var i = 0; i < 7; i++) {
var dayObj = {};
dayObj.date = dtVal + i;
dayObj.day = weekday[i];
days.push(dayObj);
}
return days;
}
});
Template.qDetails.record = function () {
return Session.get("record");
};
.
위의 코드에서 "일"도우미 기능이 표시되지 않은 레코드에서 "WorkWeekOF"날짜를 가져 오려고 할 때 목록 페이지가 표시되므로 "일"도우미 기능이 표시됩니다.레코드가 선택되면이 호출 만 통화 할 수 있습니까?
해결책
이것은 처음부터 CanqDetails
템플릿이 렌더링되는 방법을 보여주는 위의 내용이 없기 때문에 이것은 약간 혼란 스럽습니다.그러나 그것이 가정하면, 당신은 단지 사용할 수 있습니다 :
var dt = Session.get("record") ? Session.get("record").additionalProperties.workWeekOf : [default date]
.
[default date]
는 Sensible 일 수 있습니다 (new Date()
). 오류가 발생하지 않도록 무언가를 반환해야합니다.이것은 유성의 꽤 일반적이지만 쉽게 문제가 쉽습니다. 세션 변수 또는 컬렉션이 아직 준비가되지 않은 경우에 적합한 기본값이 필요합니다.
제휴하지 않습니다 StackOverflow