我导出的模型如下所示:
var Foxx = require("org/arangodb/foxx");
var myNewModel = Foxx.extend(
{ schema:{...} },
{
beforeSave: function() {
throw new Error('reached before save');
}
});
在控制器中使用它,如:
var FoxxRepo = require("org/arangodb/foxx").Repository;
...
app.POST(function(req, resp) {
var instance = new myNewModel({...schemadata...});
var repo = new FoxxRepo(collection, { model: myNewModel });
repo.save(instance);
}
...
我可以获取beforeSave模型事件以响应存储库事件的唯一方法是在将实例传递给repo之前,通过instance.on(...)向模型实例注册该函数。
此讨论中有一些主题,但它们似乎是在添加事件注册时才开始的。该文档here有一个显示事件注册的示例,如此处所示。我的服务器版本是2.7.1。
有没有办法在定义文件中为foxx模型添加事件处理程序,并让实例中包含处理程序,以便它们监听存储库事件,或者每次都必须通过model.on()手动添加所有处理程序我创建了一个新的数据模型实例?
答案 0 :(得分:1)
ArangoDB 2.7将ES5样式的构造函数替换为ES6类。使用extend
方法时,此更改引入了许多微妙的错误,这就是为什么它在后续的错误修复版本中被还原的原因。
ArangoDB的当前版本是2.7.4。您可以尝试升级并查看是否能解决您的问题吗?
编辑:我可以在最新的ArangoDB 2.7和2.8中重现错误。似乎没有足够的测试覆盖率和漏洞。谢谢你告诉我们。该问题将在下一个错误修复版本中修复。
在此期间,您可以手动绑定每个存储库实例的事件,如下所示:
repo.on('beforeSave', Model.beforeSave.bind(Model));