我有一个基本的Ember应用程序来创建和编辑博客帖子,我正在使用Ember,Ember-Data和Mongoose。我无法弄清楚原因,但每当我为帖子提交修改时,它都会在Chrome控制台中记录以下错误:
Assertion failed: No model was found for '__v'
对于那些不熟悉Mongoose的人,它会自动将__v
添加到您的文档中进行版本控制。我试图通过normalizeHash删除它,并且Ember Inspector显示它不在浏览器中的数据中,但错误仍然神奇地出现:
App.ApplicationSerializer = DS.RESTSerializer.extend({
primaryKey: "_id",
normalizeHash: {
posts: function(hash) {
console.log("That's a hash");
delete hash.__v;
return hash;
}
}
});
我也试图作弊,只是将__v
添加到我的模型中以便在那里处理,但我仍然得到同样的错误:
App.Post = DS.Model.extend({
title: DS.attr(),
post_content: DS.attr(),
tags: DS.attr(),
creationDate: DS.attr(),
author: DS.attr(),
complete: DS.attr(),
__v: DS.attr()
});
数据仍然保留在服务器上,因此服务器对正在发生的事情没有任何问题。它本来只是一个恼人的错误消息,似乎没有任何负面后果,但当我试图添加一个didUpdate
监听器留在页面上,直到我得到成功事件,它不会执行回调。
post.one('didUpdate', this, function() {
// redirects to post itself
this.transitionToRoute('post', post);
});
关于如何正确处理__v
的任何想法?如果我无法击败它,我只是要告诉Mongoose停止创建它们,但我宁愿在文档中保留版本。