Meteor Session对象不具有反应性

时间:2015-06-19 10:31:12

标签: javascript meteor

我正在研究Discover Meteor教程,一个烦人的问题不断涌现。当我使用控制台更改应用程序数据时,应用程序不会像承诺的那样自动更新被动数据源。不确定发生了什么。这是一个例子来说明问题(并弄清楚它是代码本身还是其他东西)。

初始化应用并包含下划线和铁路由器:

meteor create testApp
meteor add underscore
meteor add iron:router

创建以下文件结构:

.
└── testApp
   ├── .meteor
   |  └── [meteor auto generated files]
   ├── lib
   |  └── router.js
   └── client
      ├── layout.html
      ├── layout.js
      ├── main.html
      └── pageone.html

router.js

Router.configure({
    layoutTemplate: 'layout',
});
Router.route('/', {name:'pageone'});

的layout.html

<template name="layout">
    <div class="container">
        <header class="navbar navbar-default" role="navigation"> 
      <div class="navbar-header">
        <a class="navbar-brand" href="{{pathFor 'pageone'}}">{{pageTitle}}</a>
      </div>
    </header>
    <div id="main">
      {{> yield}}
    </div>
    </div>
</template>

layout.js

Template.layout.helpers({
  pageTitle: function() { return Session.get('pageTitle') || "placeholder"; }
});

main.html中

<head>
    <title>testApp2</title>
</head>

pageone.html

<template name="pageone">
  <div class="message">
    <h1>Test App for SO</h1>
  </div>
</template>

现在使用testApp命令从meteor目录运行应用程序,然后在浏览器中导航到localhost:3000

现在在控制台中输入Session.set('pageTitle', 'New Title');

我正在使用Chrome,当我这样做时,我正在监控流星服务器的终端窗口打印出Client modified -- refreshing。但是,即使Session对象被认为是被动的,也没有任何反应。然后,如果我刷新选项卡,我会得到一个空白屏幕,如果我想让我的应用程序再次运行,则必须手动重新启动流星服务器。

有谁知道这里发生了什么?

3 个答案:

答案 0 :(得分:0)

当我在您的存储库中搜索Session.get时,我找不到任何匹配,因此您没有使用任何会话变量... https://github.com/dantzlerwolfe/microscope/search?q=Session.get

尝试此操作让您的示例正常工作并重新考虑您对domain所做的工作。那不是流星如何运作......

Template.postItem.helpers({
    name: function() {
        return Session.get('pageTitle');
    }
});

答案 1 :(得分:0)

好吧,我检查了存储库,一切正常。除了更改页面标题 - 但它不应该。

请注意,在layout.html中您已指定帮助pageTitle,但您尚未指定该功能。 (我假设你认为你可以简单地访问模板中的会话变量)。在layout.js中,您必须创建一个名为pageTitle的新助手,它返回会话变量。像这样:

Template.layout.helpers({
    pageTitle: function(){
        return Session.get("pageTitle");
    }
})

答案 2 :(得分:0)

This is a "problem" with Chrome's console itself. Actually (and I feel dumb now) console has completely separate settings from the browser.

  1. Open the console
  2. Click on the gear icon.
  3. Make sure the "disable javascript" box is not checked.

Now you should be able to modify your app from the console. See THIS SO Q&A for more details.