我已经设置了一个包含2个实例方法的简单模型。如何在生命周期回调中调用这些方法?
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
// Instance methods
doSomething: function(cb) {
console.log('Lets try ' + this.doAnotherThing('this'));
cb();
},
doAnotherThing: function(input) {
console.log(input);
}
},
beforeUpdate: function(values, cb) {
// This doesn't seem to work...
this.doSomething(function() {
cb();
})
}
};
答案 0 :(得分:2)
看起来自定义定义的实例方法不是设计为在生命周期中调用,而是在查询模型之后。
SomeModel.findOne(1).done(function(err, someModel){
someModel.doSomething('dance')
});
链接到文档中的示例 - https://github.com/balderdashy/sails-docs/blob/0.9/models.md#custom-defined-instance-methods
答案 1 :(得分:2)
尝试在常规javascript中定义函数,这样就可以从整个模型文件中调用它们,如下所示:
// Instance methods
function doSomething(cb) {
console.log('Lets try ' + this.doAnotherThing('this'));
cb();
},
function doAnotherThing(input) {
console.log(input);
}
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
},
beforeUpdate: function(values, cb) {
// accessing the function defined above the module.exports
doSomething(function() {
cb();
})
}
};
答案 2 :(得分:1)
doSomething 和 doAnotherThing 不是属性,是方法,必须处于Lifecycle回调级别。尝试这样的事情:
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
},
doSomething: function(cb) {
console.log('Lets try ' + "this.doAnotherThing('this')");
this.doAnotherThing('this')
cb();
},
doAnotherThing: function(input) {
console.log(input);
},
beforeCreate: function(values, cb) {
this.doSomething(function() {
cb();
})
}
};
在第二位,您正在尝试发送到控制台 this.doAnotherThing('this'),但它是模型的一个实例,因此您无法像“参数”那样传递它“字符串。而不是尝试分开执行此功能,并将工作