我使用Cloud Function在'onWrite'事件的记录上生成一个简短的唯一URL,并保存它。这很好用,但是当我使用EmberFire从我的Ember应用程序保存记录时,我确实得到一个模型作为回调的参数,但是这个模型的URL是未定义的。有没有办法将其退还给客户?或者我是否需要查询记录以获取生成的URL?
这是我的Cloud Function代码的外观:
exports.generateUrl = functions.database.ref('/tournaments/{tid}')
.onWrite(event => {
if (event.data.previous.exists()) {
return;
}
if (!event.data.exists()) {
return;
}
const url = shortid.generate();
return event.data.ref.update({ url });
});
这是我通过表单提交保存数据的组件。我正在使用一个名为ember-changeset的加载项来处理一些验证,但这不应该与问题有关。
export default Ember.Component.extend({
submit(e) {
e.preventDefault();
let snapshot = this.changeset.snapshot();
return this.changeset
.cast(Object.keys(this.get('schema')))
.validate()
.then(() => {
if (this.changeset.get('isValid')) {
return this.changeset
.save()
.then((result) => {
// Here, result.get('url') is undefined.
})
}
})
}
});
答案 0 :(得分:0)
如果你有一个函数在写入后将新数据写回数据库中的某个位置,你将不得不继续在客户端上监听该位置以获取该数据。不要使用一次性读取(once()
),使用持久监听器(on()
),并在该监听器中,确保您获取URL或您希望生成的任何内容功能。如果您不再需要它,请删除该侦听器。
(对不起,我不知道Ember或它提供了什么样的实时数据库抽象 - 我给你提供了你在参考上使用的简单的JavaScript API方法。)