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
中,您已经指定了helperpageTitle
,但尚未指定函数。(我假设,您认为可以简单地访问模板中的会话变量)。在layout.js
中,必须创建一个名为pageTitle
的新助手,该助手返回会话变量。像这样:
Template.layout.helpers({
pageTitle: function(){
return Session.get("pageTitle");
}
})
这是Chrome控制台本身的一个“问题”。实际上(我现在觉得自己很笨)控制台和浏览器有完全不同的设置
打开控制台
单击齿轮图标
确保未选中“禁用javascript”框
现在你应该可以从控制台修改你的应用了。有关更多详细信息,请参阅。@Kyll。我已经按照你的建议添加了一个MCVE。希望这能让事情变得更清楚。我已经按照上面Kryll的建议添加了一个MCVE。即使我添加了助手,我仍然会遇到同样的问题。你能根据我在编辑中提供的内容重新创建这个问题吗?我已经按照上面Kryll的建议添加了一个MCVE。即使我添加了助手,我仍然会遇到同样的问题。您能否根据我在编辑中提供的内容重新创建该问题?