ArangoDB模型事件未与存储库一起激发

ArangoDB模型事件未与存储库一起激发,arangodb,foxx,Arangodb,Foxx,我正在导出模型,如下所示: var Foxx = require("org/arangodb/foxx"); var myNewModel = Foxx.extend( { schema:{...} }, { beforeSave: function() { throw new Error('reached before save'); } }); 并在控制器中使用它,如中所示: var FoxxRepo = require("org/arangodb/fox

我正在导出模型,如下所示:

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(…)向模型实例注册函数

在这个讨论中有一些线索,但它们似乎可以追溯到添加事件注册刚刚开始的时候。文档中有一个显示事件注册的示例,如我在这里所示。我的服务器版本是2.7.1


是否有方法将事件处理程序添加到定义文件中的foxx模型中,并将处理程序包含在实例中,以便它们侦听存储库事件,或者我必须通过model.on()手动添加所有处理程序每次我创建一个新的数据模型实例时?

Arangodb2.7都会用ES6类的原型替换ES5样式的构造函数。这个更改在使用
extend
方法时引入了一些细微的错误,这就是为什么它在随后的错误修复版本中被恢复的原因

ArangoDB的当前版本是2.7.4。您能否尝试升级,看看这是否解决了您的问题

编辑:我可以在最新的ArangoDB 2.7和2.8中重现错误。似乎没有足够的测试覆盖率,错误就漏掉了。谢谢你告诉我们。该问题将在下一个错误修复版本中修复

同时,您可以手动绑定每个存储库实例的事件,如下所示:

repo.on('beforeSave', Model.beforeSave.bind(Model));

通过brew升级至2.7.3,brew是最新版本。升级没有解决这个问题(至少在我的上下文中),我在下载页面上没有看到任何超过2.7.3的内容。@gph我已经确认了这个错误,并在GitHub上创建了一个问题:根据Alan的回答,发布移动到GitHub,以作为错误而不是问题解决。