德比 – 自动“刷新”的变化
我正在试验derbyjs,不知道如何使用订阅的实时更新工作。
目前,该应用程序只是一个尽可能基本的后标题列表和一个文本框,可以添加一个新的post:
<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>
该应用程序只有“/”路线,它应该订阅所有职位。 而是在第一次从数据库加载post时调用callback,而不是在进行任何更改:
// 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()” – motif是在服务器的index.js文件中定义的:
store.query.expose("posts","allPosts",function(){ return this; });
目前发生的事情是,当我按下“添加”button,一个新的职位被添加到数据库,但我只能看到手动页面刷新后的列表中的职位。 如果我在两个单独的选项卡中打开该页面两次,并在一个选项卡中添加一个新的post,则新post不会自动显示在另一个选项卡中。
我错过了什么?
为了做活动绑定,您需要使用单个括号。
尝试将<postList:>
更改为:
<postList:> {#each posts as :post} <app:post> {/each} <post:> <div>{:post.title}</div>
我还添加as :post
确保path是正确的。 这样可以避免大量的错误。
如果这不能解决问题,或者您还有其他问题,请在freenode上join#derbyjs并发送给我(switz)。