我正在研究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
对象被认为是被动的,也没有任何反应。然后,如果我刷新选项卡,我会得到一个空白屏幕,如果我想让我的应用程序再次运行,则必须手动重新启动流星服务器。
有谁知道这里发生了什么?
答案 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.
Now you should be able to modify your app from the console. See THIS SO Q&A for more details.