私は derbyjs を試していますが、サブスクリプションを使用したリアルタイム更新がどのように機能するかわかりません。
現在、このアプリは投稿タイトルの可能な限り基本的なリストと、新しい投稿を追加できる最後のテキストフィールドです:
<Title:>
Sample derby app
<Header:>
<!-- This is a component defined in the /ui directory -->
<ui:connectionAlert>
<Body:>
<h1>Posts</h1>
<app:postList>
<input type="text" value="{_fieldValue}"><input type="button" value="add" x-bind="click:add">
<postList:>
{{#each posts}}
<app:post>
{{/}}
<post:>
<div>{{title}}</div>
アプリには「/」ルートしかなく、すべての投稿をサブスクライブする必要があります。代わりに、コールバックは投稿がデータベースから最初にロードされたときに呼び出されますが、変更があったときは呼び出されません:
// Derby routes can be rendered on the client and the server
get('/', function(page, model, params) {
model.subscribe(model.query("posts").allPosts(), function(err, posts) {
page.render({
posts:posts.get()
})
})
})
// CONTROLLER FUNCTIONS //
ready(function(model) {
this.add = function(){
model.set("posts."+model.id(),{title:model.get("_fieldValue")});
model.set("_fieldValue","");
}
})
「getAllPosts()」モチーフは、サーバーの index.js ファイルで定義されています。
store.query.expose("posts","allPosts",function(){
return this;
});
現在何が起こっているかというと、「追加」ボタンを押すと新しい投稿がデータベースに追加されますが、ページを手動で更新した後にのみリストに投稿が表示されます。ページを 2 つの別々のタブで 2 回開き、一方のタブに新しい投稿を追加すると、新しい投稿が他方のタブに自動的に表示されません。
私は何か見落としてますか?