2015-06-19 58 views
0

我正在通过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> 

现在使用meteor命令运行从testApp目录中的应用程式,前往localhost:3000在浏览器中。

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

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

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

+1

@Kyll。我已经按照你的建议添加了一个MCVE。希望这可以让事情更清楚。 – jdw

回答

0

这是Chrome控制台本身的一个“问题”。其实(现在我觉得笨)控制台已经完全独立于浏览器的设置。

  1. 打开控制台
  2. 点击齿轮图标。
  3. 确保“禁用javascript”框未被选中。

现在您应该可以从控制台修改您的应用程序。有关更多详细信息,请参阅THIS SO Q&A

0

当我搜索你的资料库为Session.get我找不到任何的打击,这样你就不会使用任何会话变量...

试试这个,让您的示例工作并重新考虑你做什么domain。多数民众赞成在流星不是如何工作...

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

我已经按照上面Kryll的建议添加了一个MCVE。即使添加帮手,我仍然遇到同样的问题。您可以根据我在编辑中提供的内容重新创建问题吗? – jdw

0

嗯,我已检查存储库和所有工作正常。除了更改页面标题 - 但它不应该。

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

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

我已经按照上面Kryll的建议添加了一个MCVE。即使添加帮手,我仍然遇到同样的问题。您可以根据我在编辑中提供的内容重新创建问题吗? – jdw