【问题标题】:How do I use Geddy Model Events如何使用 Geddy 模型事件
【发布时间】:2013-10-24 02:16:10
【问题描述】:

我是 geddy 的新手,对如何使用模型事件感到困惑。

我的模型有一个 slug 字段,我想在保存任何记录之前生成 slug(基于他们输入的名称)。

换句话说,我如何在 geddy 中做到这一点?

导轨型号:

before_save :generateSlug
private:
 def generateSlug
   self.slug = self.name.parameterize
 end

示例型号代码: 模型/page.js

slugify = require('slug');
var Page = function(){
  this.defineProperties({
   slug: {type: 'string'},
   name: {type: 'string', required: true}
  });

  this.beforeSave = function(){
   this.slug = slugify(this.name);
  }
}
exports.Page = Page;

当我运行 p = geddy.model.Page.create({name: 'hello world'});p.save(function(e,d){ console.log(d); }) 时,slug 未定义

【问题讨论】:

    标签: node.js model geddy


    【解决方案1】:

    您可以使用beforeValidate 生命周期方法来执行此操作。

    试试这个:

    this.beforeValidate = function () {
      this.slug = slugify(this.name);
    };
    

    注意:这在 Model@0.3.2 之前不起作用,它修复了生命周期方法不一致的错误。

    【讨论】:

    • 谢谢,但我在文档中看不到任何 afterCreate,当我尝试 this.beforeSave 时,我的 slug 仍然得到未定义而不是 slug 字符串。
    • 嗯,你能发布一些示例代码,以便我看看你在做什么吗?
    • 您好 Ben,我刚刚更新了问题以添加示例代码。谢谢
    • 嗨 ginad,我已经更新了答案。 beforeSave 是一个事件,所以你必须倾听它。但是,我将在 Model 中提出问题,因为 afterCreate 在它是属性时被调用,但许多其他事件不是。这是不一致的,可能是我们的错。对不起!
    • 谢谢 Ben,但是当我定义 this.on('beforeValidate') 或模型中的任何事件时,我得到TypeError: Object [object Object] has no method 'on'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多