我一直在嘗試做一些非常簡單的發佈/訂閱流星,我無法讓它工作,因爲我期望從閱讀可用的源如Meteor文檔。流星:集合中的變化並不反映在呈現的HTML
我正在使用OSX Yosemite的Macbook Pro,並運行Node.js v0.10.40,Meteor v1.1.0.2和Chrome版本43.0.2357.132(64位)。
以下是我與兩個不同的例子經歷:
一:簡單的待辦事項教程。
簡單todos.html
<head>
<title>Todo List</title>
</head>
<body>
<div class="container">
<header>
<h1>Todo List</h1>
</header>
<ul>
{{#each tasks}}
{{> task}}
{{/each}}
</ul>
</div>
</body>
<template name="task">
<li>{{text}}</li>
</template>
簡單todos.js
Tasks = new Meteor.Collection("tasks");
// simple-todos.js
if (Meteor.isClient) {
// This code only runs on the client
Template.body.helpers({
tasks: function(){
Tasks.find({});
}
});
}
問題描述
本教程指出,將項目添加到Tasks
時,應該住在反映瀏覽器。它不是。我曾嘗試在Chrome的JS控制檯和meteor shell
中添加項目Tasks.insert({text: "todo from server", createdAt: new Date()})
。我還添加使用meteor mongo
和物品中所呈現的客戶視圖仍然沒有改變
的自動發佈包安裝,我可以插入和瀏覽器的JS控制檯查詢Tasks
集,但更改不會反映在呈現HTML。
二:一個簡單的發佈/訂閱方案
Basic.html
<head>
<title>basic</title>
</head>
<body>
<h1>Welcome to Meteor!</h1>
<p>text gets pushed</p>
</body>
Basic.js。
MessageColl = new Mongo.Collection("messages");
if(Meteor.isServer){
Meteor.publish("messages",function(){
MessageColl.find({});
})
}
if(Meteor.isClient){
Meteor.subscribe("messages", {
onReady: function() { console.log("onReady And the Items actually Arrive", arguments); },
onError: function() { console.log("onError", arguments); }
});
}
問題描述
當包自動發佈添加到我的項目一切按預期工作。我可以在Chrome中的JS控制檯中插入新項目,我也可以查詢MessageColl
集合並檢索結果。
當自動發佈包被刪除時,我可以在Chrome中的JS控制檯的MessageColl
集合中插入項目,並通過查詢meteor shell
中的集合來驗證它們是否已添加。但是,當我嘗試使用MessageColl.findOne()
或MessageColl.find().fetch()
查詢時,返回值爲undefined
。
在HTML文檔結構中完成的所有更改按預期推送。
既不調用onReady
或onError
回調函數,也不會指向與訂閱方法相關的問題。