2016-02-16 2 views
2

this tutorial о динамических шаблонах с динамическими данными, я получаю консольную ошибку, когда событие click запускается на любом из элементов.Dynamic Template and undefined value value

Uncaught ReferenceError: template is not defined in main_menu.js

в строке, указанной в коде ниже. Я не уверен, почему и хотел бы понять не только исправленный. Большое спасибо

Template.mainMenu.onCreated(function() { 
 
    this.selectedItem = new ReactiveVar("task1"); 
 
}); 
 

 
Template.mainMenu.helpers({ 
 
    menuItems: [ 
 
    {menuItem: "task1", login: false}, 
 
    {menuItem: "task2", login: true}, 
 
    {menuItem: "task3", login: true}, 
 
    {menuItem: "task4", login: true}, 
 
    {menuItem: "task5", login: true}, 
 
    {menuItem: "task6", login: true}, 
 
    {menuItem: "task7", login: false}, 
 
    {menuItem: "task8", login: false}, 
 
    {menuItem: "task9", login: false}, 
 
    {menuItem: "LOG IN", login: false} 
 
    ], 
 
    task: function() { 
 
    return Template.instance().selectedItem.get(); 
 
    }, 
 
    taskData: function() { 
 
    var tab = Template.instance().selectedItem.get(); 
 
    return tab; 
 
    } 
 
}); 
 

 
Template.mainMenu.events({ 
 
    'click .menuItem': function (event) { 
 
    var item = this.menuItem; 
 
    var date = new Date(); 
 
    initializeTask(item); 
 

 
    Session.set('taskSelected', this.menuItem); 
 
    Session.set('showMainMenu', false); 
 
    Session.set('taskInProgress', true); 
 
    Session.set('showFooter', true); 
 

 
    //tasks tracking 
 
    if (Tasks.find().count() === 0) { 
 
     Tasks.insert({menuItem: item, createdAt: date}); 
 
    } else { 
 
     var selected = Tasks.findOne(); 
 
     Tasks.update({_id: selected._id}, {$set: {menuItem: item, createdAt: date}}); 
 
    } 
 

 
    var currentItem = $(event.target).closest("li"); 
 
    template.selectedItem.set(currentItem.data("template")); <<----- THIS IS THE TRUBLE LINE ----- 
 
    } 
 
});
<head> 
 
    <title>Tasks</title> 
 
</head> 
 

 
<body> 
 
    {{> header}} 
 

 
    {{#if (session 'showMainMenu')}} 
 
    {{> mainMenu}} 
 
    {{/if}} 
 

 
    {{#if (session 'showFooter')}} 
 
    {{> footer}} 
 
    {{/if}} 
 
</body> 
 

 
<template name="mainMenu"> 
 
    <div class="container"> 
 
    <div class="row"> 
 
     <section class="col-xs-12"> 
 
     <div class="list-group"> 
 
      {{#each menuItems}} 
 
      <li data-template="{{menuItem}}"> 
 
       <a href="#" class="list-group-item menuItem"> 
 
       <img src="/abc.png"> 
 
       {{menuItem}} <span class="badge">&#x3e;</span> 
 
       </a> 
 
      </li> 
 
      {{/each}} 
 
     </div> 
 
     </section> 
 
     {{> Template.dynamic template=task data=taskData}} 
 
    </div> 
 
    </div> 
 
</template> 
 

 
<template name="task1"> 
 
    {{ this }} 
 
    <form> 
 
    <input type="text" name="task1Number"> 
 
    <input type="submit"> 
 
    </form> 
 
</template> 
 

 
<template name="task2"> 
 
    {{this}} 
 
</template>

ответ

0

Ваше событие слушатель будет передан экземпляр шаблона в качестве второго параметра. Заменить 'click .menuItem': function (event) { на 'click .menuItem': function (event, template) {. Это решит проблему.

1

Вы не добавили шаблон в качестве параметра для события. 'click .menuItem': function (event).

Попробуйте 'click .menuItem': function (event,template)

1

просто необходимо обновить параметр события.

'click .menuItem': function(event,template) { 
    // your codes here 
}