Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使下面的模板辅助程序(Meteor)?_Javascript_Meteor - Fatal编程技术网

Javascript 如何使下面的模板辅助程序(Meteor)?

Javascript 如何使下面的模板辅助程序(Meteor)?,javascript,meteor,Javascript,Meteor,我有章节集合,并在其中一个模板中显示章节列表: <template name="chapterItem"> <div class="chapter clearfix {{isCurrentChapter}}"> <div class="chapter-arrows"> <a class="move-up" href="javascript:;"><i class="ion-arrow-up-a"></i&g

我有
章节
集合,并在其中一个模板中显示章节列表:

<template name="chapterItem">
  <div class="chapter clearfix {{isCurrentChapter}}">
    <div class="chapter-arrows">
      <a class="move-up" href="javascript:;"><i class="ion-arrow-up-a"></i></a>
      <a class="move-down" href="javascript:;"><i class="ion-arrow-down-a"></i></a>
    </div>
    <h4><a class="open-chapter" href="javascript:;">{{title}}</a></h4>
    <a class="delete-current-chapter" href="javascript:;"><i class="ion-close-circled"></i></a>
  </div>
</template>
现在的问题是,
活动
仅在页面加载时返回更改


如何才能使
isCurrentChapter
变为反应式?单击
按钮时触发。打开章节
事件?

要使辅助程序成为反应性的,它必须依赖于反应性源。我们可以使用会话

// book_page.js
Template.bookPage.events({
  "click .open-chapter": function() {
    Session.set('currentChapter', this._id);
    localStorage.setItem("currentChapter", this._id);
  }
});

// chapter_item.js
Template.chapterItem.helpers({
  isCurrentChapter: function() {
    var currentChapterId = Session.get("currentChapter");
    var selectedChapterId = this._id;
    if (selectedChapterId === currentChapterId) {
      return "active";
    }
  }
});
当会话“currentChapter”更改时,助手isCurrentChapter将重新运行

编辑:如果要在页面加载或刷新时设置活动类,可以执行以下操作:

// book_page.js
Template.bookPage.events
  "click .open-chapter": function() {
    localStorage.setItem "currentChapter", this._id
  }

// chapter_item.js
Template.chapterItem.helpers({
  isCurrentChapter: function() {
    var currentChapterId = localStorage.getItem("currentChapter");
    var selectedChapterId = this._id;
    if selectedChapterId === currentChapterId) {
      return "active";
    }
  }
});
var currentChapterId = Session.get("currentChapter") || localStorage.getItem("currentChapter");
尝试从会话获取currentChapter,如果未定义,则从localStorage获取。或者在代码上使用Session.setDefault:

Session.setDefault('currentChapter', localStorage.getItem('currentChapter'));

使用会话而不是本地存储,它们是被动的,我认为这只是一个输入错误,但你的最后一个if不是closed@Sindis我忘了为什么更改了
localStorage
的会话。我想我需要在页面重新加载时保持该值。然后你应该使用Tracker@Sindis强制反应我尝试过(我用Tracker.autorun将
.isCurrentChapter
的内部部分括起来),但得到的是
[Object]Object
而不是
活动的
。持久会话ftw,但在重新加载会话之后,会话将丢失,并且不会突出显示任何章节,我认为这是作者不使用会话的主要顾虑