【问题标题】:Meteor only trigger template after selecting item from listMeteor 仅在从列表中选择项目后触发模板
【发布时间】:2014-07-30 04:45:43
【问题描述】:

我有一个典型的场景,其中有一个列表视图,然后是一个详细信息视图。您可以通过选择列表项进入详细信息视图。记录中的数据当然会通知布局视图的详细信息。我看到的是子模板的辅助函数被调用得太快(在列表视图呈现期间)以获取列表详细信息的数据。此外,当我单击列表中的项目时,它不会被调用。我究竟做错了什么?我正在使用 Meteor 0.8.2 和 jQM 1.4.3。

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

在上面的代码中,“days”帮助函数在显示列表页面时被调用,这会导致错误,因为它试图从尚未选择的记录中提取“workWeekOf”日期。选择记录后,如何才能进行此仅调用?

【问题讨论】:

    标签: jquery-mobile meteor meteor-blaze spacebars


    【解决方案1】:

    这有点令人困惑,因为上面没有任何内容显示您的qDetails 模板首先是如何呈现的。但是,假设确实如此,您可以使用:

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

    [default date] 可以是任何合理的东西(如new Date()),但您需要返回一些内容以避免引发错误。这是 Meteor 中一个很常见但很容易解决的问题 - 当您的 Session 变量或 Collection 尚未准备好时,您只需要一个合适的默认值。

    【讨论】:

    • 好的,看看上面更新的代码。有一个 jQM 页面从 qListItems 中列表项上的 href 链接调用 qDetails。我正在硬编码日期以使用调试器语句绕过它,但在选择项目时它没有被调用。但是当我添加这个三元运算以在需要时获取实际日期时,它起作用了,所以谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2012-08-20
    • 2017-04-10
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多