2015-06-19 97 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