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,我正在努力完成教程,一个恼人的问题不断出现。当我使用控制台更改应用程序数据时,应用程序不会按照承诺自动更新反应数据源。不知道发生了什么事。下面是一个例子来说明这个问题(并找出是代码本身还是其他原因) 初始化应用程序并包括下划线和铁路由器: meteor create testApp meteor add underscore meteor add iron:router . └── testApp ├── .meteor | └── [meteor auto generated

我正在努力完成教程,一个恼人的问题不断出现。当我使用控制台更改应用程序数据时,应用程序不会按照承诺自动更新反应数据源。不知道发生了什么事。下面是一个例子来说明这个问题(并找出是代码本身还是其他原因)

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

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
创建以下文件结构:

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'});
Template.layout.helpers({
  pageTitle: function() { return Session.get('pageTitle') || "placeholder"; }
});
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>
<head>
    <title>testApp2</title>
</head>
<template name="pageone">
  <div class="message">
    <h1>Test App for SO</h1>
  </div>
</template>
main.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>
<head>
    <title>testApp2</title>
</head>
<template name="pageone">
  <div class="message">
    <h1>Test App for SO</h1>
  </div>
</template>

测试PP2
pageone.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>
<head>
    <title>testApp2</title>
</head>
<template name="pageone">
  <div class="message">
    <h1>Test App for SO</h1>
  </div>
</template>

SO的测试应用程序
现在使用
meteor
命令从
testApp
目录运行应用程序,并在浏览器中导航到
localhost:3000

现在键入Session.set('pageTitle','newtitle')进入控制台

我使用的是Chrome,当我这样做时,我监控meteor服务器的终端窗口会打印出
客户端修改-刷新
。但是,即使
会话
对象被认为是被动的,也不会发生任何事情。然后,如果我刷新标签,我会得到一个空白屏幕,如果我想让我的应用程序重新工作,我必须手动重新启动meteor服务器


有人知道这里发生了什么吗?

当我在您的存储库中搜索
会话时。get
我找不到任何命中率,因此您没有使用任何会话变量。。。

试着这样做,让您的示例发挥作用,并重新考虑如何使用
。流星不是这样工作的

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

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

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

Template.layout.helpers({
    pageTitle: function(){
        return Session.get("pageTitle");
    }
})
这是Chrome控制台本身的一个“问题”。实际上(我现在觉得自己很笨)控制台和浏览器有完全不同的设置

  • 打开控制台
  • 单击齿轮图标
  • 确保未选中“禁用javascript”框

  • 现在你应该可以从控制台修改你的应用了。有关更多详细信息,请参阅。

    @Kyll。我已经按照你的建议添加了一个MCVE。希望这能让事情变得更清楚。我已经按照上面Kryll的建议添加了一个MCVE。即使我添加了助手,我仍然会遇到同样的问题。你能根据我在编辑中提供的内容重新创建这个问题吗?我已经按照上面Kryll的建议添加了一个MCVE。即使我添加了助手,我仍然会遇到同样的问题。您能否根据我在编辑中提供的内容重新创建该问题?