Domanda

Ho uno scenario tipico dove c'è una vista elenco e poi c'è una vista dettagli.Si ottiene la vista dei dettagli selezionando una voce di elenco.Ci sono dati nel disco che ovviamente informerà la visualizzazione del layout dei dettagli.Quello che vedo è che la funzione Helper Subtemplate viene chiamata troppo presto (durante il rendering della vista elenco) per avere i dati per i dettagli dell'elenco.Inoltre, non viene chiamato quando faccio clic su un articolo nell'elenco.Che cosa sto facendo di sbagliato?Sto usando Meteor 0.8.2 con JQM 1.4.3.

L'HTML sembra segue:

<!-- 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>
.

I bit JS sono:

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");
};
.

Nel codice sopra la funzione helper "Days" viene chiamata quando viene visualizzata la pagina dell'elenco che si verifica un errore perché sta cercando di estrarre la data "workweekof" da un record che non è ancora stato selezionato.Come posso ottenere questa chiamata solo una volta che un record è stato selezionato?

È stato utile?

Soluzione

Questo è leggermente confuso, dal momento che non c'è nulla di cui sopra che mostra come il modello YourqDetails viene reso in primo luogo.Tuttavia, supponendo che lo faccia, puoi semplicemente usare:

var dt = Session.get("record") ? Session.get("record").additionalProperties.workWeekOf : [default date]
.

[default date] potrebbe essere qualsiasi cosa sensibile (come new Date()), ma è necessario restituire qualcosa per evitare che l'errore venga lanciato.Questo è un problema piuttosto comune ma molto facilmente risolto in Meteor - hai solo bisogno di un default adatto per quando la tua variabile di sessione o la raccolta non è ancora pronta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top