Pergunta

Eu tenho um cenário típico em que há uma exibição de lista e uma exibição de detalhes.Você acessa a visualização de detalhes selecionando um item da lista.Há dados no registro que obviamente informarão a visualização do layout dos detalhes.O que vejo é que a função auxiliar do submodelo está sendo chamada muito cedo (durante a renderização da visualização de lista) para obter os dados da lista details .Além disso, não está sendo chamado quando clico em um item da lista.O que estou fazendo de errado?Estou usando o Meteor 0.8.2 com jQM 1.4.3.

O HTML tem a seguinte aparência:

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

Os bits JS são:

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

No código acima, a função auxiliar "days" está sendo chamada quando a página da lista é mostrada, o que resulta em um erro porque está tentando extrair a data "workWeekOf" de um registro que ainda não foi selecionado.Como posso chegar a esta chamada somente depois que um registro for selecionado?

Foi útil?

Solução

Isso é um pouco confuso, já que não há nada acima que mostre como o seuqDetails o modelo é renderizado em primeiro lugar.No entanto, supondo que sim, você pode simplesmente usar:

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

[default date] poderia ser qualquer coisa sensata (como new Date()), mas você precisa retornar algo para evitar que o erro seja gerado.Este é um problema bastante comum, mas facilmente resolvido no Meteor - você só precisa de um padrão adequado para quando sua variável de sessão ou coleção ainda não estiver pronta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top