`
jbf034
  • 浏览: 153166 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Callbacks

阅读更多
“活动记录”控制“模型”对象的生命周期—它创建它们,监视它们的修改,保存,更
新和删除。使用“回调”,“活动记录”让我们的代码参与这种监视过程。我们可以在一个
对象的生命周期内让任何重大的事件来调用我们写的代码。在这些“回调”内,我们可以完
成复杂的确认,映射列的值并将它们传递到数据库外部,甚至可阻止某些操作的完成。
我们已经在“动作”内看到这个功能。当我们添加用户管理代码给我们的Depot 应用程
序时,我们想确保我们的管理员不能从数据库内删除魔法用户Dave,所以我们添加下列“回
调”给User 类。

class User < ActiveRecord::Base
before_destroy :dont_destroy_dave
def dont_destroy_dave
raise "Can't destroy dave" if name == 'dave'
end
end
before_destroy 调用注册don’t_destroy_dave()方法为一个“回调”,它在user 对象被删除时被调用。如果试图删除Dave 用户,这个方法引发一个异常,并且行不会被删除。
“活动记录”定义了16 个“回调”。这些形式中第十四种形式before/after 对和括号
内一些“活动记录”对象内的选项。例如,before_destroy 回调将在destroy()方法调用之前被调用,after_destroy 将在其之后被调用。
有两个例外,after_find 和after_initialize,
它没有相应的before_xxx 回调。(这两个回调在其它方式中是不同的,我们稍后会看到。)


图15.4 显示了14 对回调被包装在“模型”对象的基本create,update 和destroy 操作
中。或许让人惊讶,before 和after 确认调用不被嵌套。
除了这十四个调用外,after_find 回调在任何find 操作之后被调用,after_initialize 在一个“活动记录”“模型”对象被创建之后被调用。
要让你的代码在一个回调期间被执行,你需要写一个处理器并与相应的回调关联起来。
--------------------------------------------------------

这儿有两种基本的回调实现方式。
首先,你可以直接地定义回调实例方法。例如,如果你想在保存事件之前处理,你可以

class Order < ActiveRecord::Base
# ..
def before_save
self.payment_due ||= Time.now + 30.days
end
end

第二种定义回调的基本方法是声明处理器。一个处理器即可以是个方法也可以是个块[处
理也可以被包含在字符串中,用eval()计算,但是这不被推荐。]。你在事件后面使用类方
法的名字来将一个特定的事件与一个处理器关联起来。要关联一个方法,声明它为private
或protected 并指定它的名字做为一个符号给处理器声明。要指定一个块,在声明后简单添
加它。这个块接受“模型”对象做为一个参数。
class Order < ActiveRecord::Base
before_validation :normalize_credit_card_number
after_create do |order|
logger.info "Order #{order.id} created"
end
protected
def normalize_credit_card_number
self.cc_number.gsub!(/-w/, '')
end
end
你可以为同一个回调指定多个处理器。它们通常按它们被指定的次序来调用,除非一个
处理器返回false(它必须是实际的false 值),在这种情况下,回调链被提前中止。
出于性能优化的原因,对于after_find 和after_initialize 事件,只有一种方式定义
“回调”,即把它们定义成方法。如果你试图使用第二种技术声明它们为处理器,它们将默
默地被忽略。
分享到:
评论

相关推荐

    jQuery源码分析之Callbacks详解

    在深入讨论jQuery源码中Callbacks模块的内部实现之前,先要明确什么是Callbacks以及它在JavaScript编程中的作用。Callbacks,即回调函数,在JavaScript中扮演着至关重要的角色。由于JavaScript是基于单线程事件循环...

    callbacksjs原生js发布订阅模式的实现参考jquery的callbacks模块

    jQuery库中的callbacks模块提供了一种强大且灵活的方式来管理回调函数队列,而`callbacksjs`则是对这一模式的原生JavaScript实现。本文将深入探讨原生JS实现的发布订阅模式,以及如何参考jQuery的callbacks模块来...

    前端开源库-backbone-callbacks

    Backbone.Callbacks是Backbone.js库的一个重要组成部分,它提供了一种处理异步操作和事件的方式,使得代码更加模块化和可维护。在本篇文章中,我们将深入探讨Backbone.Callbacks及其在Backbone.js中的应用。 首先,...

    rongxingdelphi_chat_server_using_datasnap_callbacks.ZIP

    本资料“rongxingdelphi_chat_server_using_datasnap_callbacks”正是基于Delphi的DataSnap框架,通过利用其回调机制,构建了一个聊天服务器的实例。 DataSnap是Embarcadero Delphi中的一项核心技术,它提供了用于...

    Unity Samples Particle Callbacks.unitypackage

    Unity Samples Particle Callbacks.unitypackage unity经典教程资源包 particle 简单粒子

    callbacks.py

    callbacks.py

    jQuery1.7中的Callbacks

    《jQuery1.7中的Callbacks》 回调函数在JavaScript编程中起着至关重要的作用,尤其是在处理异步操作时。jQuery库为了方便开发者管理这些回调,引入了Callbacks机制。这篇文章将深入探讨jQuery 1.7版本中的Callbacks...

    speex_callbacks.rar_speex

    标题中的"speex_callbacks.rar_speex"表明这是一个与Speex音频编码库相关的压缩文件,其中包含了处理回调函数和在带信号处理的细节。Speex是一种开源的、免费的音频压缩格式,尤其适用于语音通信,它提供了高质量的...

    speex_callbacks.rar_The Various_speex

    在处理Speex音频时,回调函数(callbacks)扮演着至关重要的角色,它们允许开发者定制特定的行为并实现自定义的功能。本文将深入探讨“speex_callbacks.rar_The Various_speex”这一资源中的核心知识点,即Speex解码...

    基于C#+ASP.NET实现的multiple client callbacks 处理技术程序源码

    在IT行业中,客户端回调(Client Callbacks)是一种增强Web应用程序实时性的关键技术,它允许服务器主动向客户端推送数据,而不仅仅是响应客户端的请求。本程序源码是基于C#和ASP.NET实现的,专用于处理多客户端回调...

    closures&callbacks.md

    A quick summary of closures and callbacks on web development.

    NX二次开发UF-CGM-unregister-callbacks 函数介绍

    NX二次开发UF_CGM_unregister_callbacks 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    NX二次开发UF-CGM-register-callbacks 函数介绍

    NX二次开发UF_CGM_register_callbacks 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...

    NX二次开发UF-CLONE-ask-cvt-callbacks 函数介绍

    NX二次开发UF_CLONE_ask_cvt_callbacks 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...

    NX二次开发UF-CLONE-ask-ntfy-callbacks 函数介绍

    NX二次开发UF_CLONE_ask_ntfy_callbacks 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的...

    model_properties_callbacks.zip_gui spring_mass spring_model prop

    标题中的"model_properties_callbacks.zip_gui spring_mass spring_model prop"提到了几个关键概念,它们是模型属性、回调函数、图形用户界面(GUI)、质量弹簧系统、以及弹簧模型。这些概念都是在构建动态模拟系统...

    2014-10-04-深入理解jQuery(2)——Callbacks1

    总的来说,jQuery的Callbacks机制是一种强大的工具,用于管理回调函数的执行顺序和行为,提供了灵活的控制选项,如执行次数限制、错误处理和回调函数的动态添加与移除。这对于构建异步操作或者事件处理逻辑非常有用...

    keras 回调函数Callbacks 断点ModelCheckpoint教程

    回调函数Callbacks 回调函数是一个函数的合集,会在训练的阶段中所使用。你可以使用回调函数来查看训练模型的内在状态和统计。你可以传递一个列表的回调函数(作为 callbacks 关键字参数)到 Sequential 或 Model ...

    浅谈keras.callbacks设置模型保存策略

    Keras库提供了`callbacks`机制,允许我们在训练过程中执行自定义操作,其中之一就是`ModelCheckpoint`,用于在训练过程中自动保存模型。本文将深入探讨如何使用`keras.callbacks.ModelCheckpoint`设置模型保存策略。...

Global site tag (gtag.js) - Google Analytics