我正在构建一个带有输入表单的应用程序,用于具有belongsTo
关系的记录。
我正在使用Ember Data和pouchdb(https://github.com/nolanlawson/ember-pouch)。
假设我想要一个香蕉属于一个篮子。
// new banana controller
banana.set('basket', basketRecord);
banana.save();
之后我转换到banana
路线,我想在那里显示创建的记录。
// banana.hbs
<p>{{basket.title}}</p>
上面的标题只显示,在我重新加载页面后,记录在从香蕉控制器调用created.inFlight
后标识为save()
,因此我无法手动重新加载记录。
根据我的理解,在将已保存的模型同步到服务器(或者,在本例中为我的PouchDB)之后,记录将转换为saved
- 状态。
如何强制我的模型更新,以便记录不再是inFlight
?
迫使这个或者我应该等待一些状态转换事件发生并在此之后继续进行是一个好主意吗?
提前感谢Ember,Ember CLI和PouchDB的创作者和社区的大力支持,让像我这样的新手能够制作出令人敬畏的东西。
答案 0 :(得分:0)
所以这是一个更复杂的问题的一部分,即:
如何在本地应用中检测到更改已从本地数据库同步到远程数据库?
这实际上并不是很难确定,但你只需要知道在哪里问。
基本上,您将要在远程CouchDB上监听更改,例如:
new PouchDB('http://somewhere:5984/somedb')
.changes({live: true}).on('change', function (change) {
console.log('yo, got a change');
});
该change
对象将包含id
,然后您可以将其映射回原始数据库。不幸的是,这是relational-pouch
抽象开始泄漏的地方,因为我从来没有为changes()
写一个relational-pouch
包装器,所以你必须自己做。 Here's an example
然后在那时你还需要更新Ember,该线程包含一些有关如何操作的信息。对不起,这并不容易,但我希望有所帮助!