Маршрутизатор Meteor Flow Router вложенные динамические шаблоны

Я пытаюсь сделать динамический шаблон внутри динамического шаблона.

Основной макет:

<template name="template1">
    {{>navbar}}
    <div class="container">
        {{>Template.dynamic template=content}}
    </div>
</template>

Sub-шаблон:

<template name="template2">
<div class="container">
    <div class="row">
        <h2>Data Input</h2>
    </div>
    <div class="row">
        <ul class="nav nav-pills">
            <li class="active"><a href="/input/inc">Inc</a></li>
            <li><a href="/input/exp">Exp</a></li>
        </ul>
    </div>
    <div class="row">
        {{>Template.dynamic template=dataSection}}
    </div>
</div>

Суб-суб-шаблон:

<template name="template3">
<h2>Inc</h2>
</template>

Ниже приведен мой код FlowRouter. Это неправильно, но я подумал, что это может дать кому-то представление о том, что я пытаюсь сделать. FlowRouter:

FlowRouter.route('/input/income', {
action: function () {
    BlazeLayout.render("template1", {
        content: "template2"
    });
    BlazeLayout.render("template2", {
        dataSection: "template3"
    });
 }
});

Я пытаюсь отобразить template2 внутри шаблона1, а затем после этого я хотел бы сделать шаблон 3 внутри шаблона 2. Должен ли я каким-то образом отобразить шаблон 3 внутри шаблона 2, прежде чем я смогу отобразить этот шаблон внутри Template1?

javascript,meteor,rendering,meteor-blaze,flow-router,

3

Ответов: 2


4 принят

Вы захотите отобразить подшаблон с помощью помощника. Измените код маршрутизатора на:

action: function () {
    BlazeLayout.render("template1", {
        content: "template2"
    });
}

Вам нужен только один вызов рендеринга, потому что шаблон2 автоматически отображает данный динамический шаблон. Теперь в template2 создайте помощника:

Template.template2.helpers({
  dataSection() {
    return "template3";
  }
});

Вы можете заменить оператор return другой логикой, если хотите, до тех пор, пока он возвращает имя шаблона.


2

Вы также можете сделать это без помощника шаблона:

BlazeLayout.render('App_Body', {main: 'parent', sub: 'details' });

HTML для основного шаблона

<template name="App_body">
   {{> Template.dynamic template=main}}
</template>

HTML для родительского шаблона

<template name="parent">
    Parent template
    {{> Template.dynamic template=sub}}
</template>

HTML для под-шаблона

<template name="details">
    Sub template
</template>

Усовершенствование маршрутов становится намного проще:

FlowRouter.route('/todos/show/:id', {
    name: 'Todo.show',
    action(params, queryParams) {
        BlazeLayout.render('App_body', {main: 'parent', sub: 'details' });
    }
});

А затем в детали JS-детали детали вы можете получить идентификатор:

Template.todo.onCreated(function todoOnCreated() {
   var id = FlowRouter.getParam('id');
   // ...
});
JavaScript, метеор, рендеринг, метеор пламя, поток-маршрутизатор,
Похожие вопросы