成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

orm2 中文文檔 3.3 模型鉤子

1treeS / 1739人閱讀

摘要:所有鉤子函數(shù)調(diào)用時,為對應的實例,所以你可以訪問到與之相關的任何東西。對于所有鉤子,你可以添加一個額外的參數(shù)到鉤子函數(shù)中。這個問題的原因是,對象僅僅在頂級鉤子函數(shù)的作用域內(nèi)是有效的,而在回調(diào)中會有各種不同的值。

譯者:飛龍

來源:Model Hooks

如果你想要監(jiān)聽發(fā)生在模型實例上的事件,你可以附帶一個函數(shù),它會在發(fā)生時調(diào)用。

現(xiàn)在支持下面這些事件:

afterLoad:(無參數(shù))加載和準備所用實例之后;

afterAutoFetch:(無參數(shù))自動獲取關聯(lián)(如果有的話)之后,無論有沒有關聯(lián)都會觸發(fā);

beforeSave:(無參數(shù))嘗試保存之前;

afterSave:(bool success)保存之后;

beforeCreate:(無參數(shù))嘗試保存新的實例之前(優(yōu)先于beforeSave);

afterCreate:(bool success)保存新的實例之后;

beforeRemove:(無參數(shù))嘗試刪除實例之前;

afterRemove:(bool success)刪除實例之后;

beforeValidation:(無參數(shù))在所有驗證之前,優(yōu)先于beforeCreatebeforeSave。

所有鉤子函數(shù)調(diào)用時,this為對應的實例,所以你可以訪問到與之相關的任何東西。

對于所有before*鉤子,你可以添加一個額外的參數(shù)到鉤子函數(shù)中。這個函數(shù)用來告訴鉤子應該繼續(xù)執(zhí)行下去還是中斷。你或許已經(jīng)從Express的工作流中熟悉了這一點。下面是一個示例:

var Person = db.define("person", {
    name    : String,
    surname : String
}, {
    hooks: {
        beforeCreate: function (next) {
            if (this.surname == "Doe") {
                return next(new Error("No Does allowed"));
            }
            return next();
        }
    }
});

這個工作流允許你在調(diào)用next之前執(zhí)行異步的操作。如果你不打算使用next就不要把它定義為參數(shù),否則會阻塞工作流。

常見問題

一個常見問題涉及到在鉤子內(nèi)部的嵌套回調(diào)中訪問this。這個問題的原因是,this對象僅僅在頂級鉤子函數(shù)的作用域內(nèi)是有效的,而在回調(diào)中會有各種不同的值。要解決這一問題,可以創(chuàng)建一個對象保存this的引用,并且在回調(diào)中用它來訪問模型的屬性。

示例

var Person = db.define("person", {
    name    : String,
    surname : String
}, {
    hooks: {
        beforeCreate: function (next) {
            var _this = this;
            checkName(this, function(err, result)) {
                if(err) return next(err);
                _this.name = result.name;
                _this.surname = result.surname;
                next();
            }
        }
    }
});

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17506.html

相關文章

  • orm2 中文文檔 3. 定義模型

    摘要:譯者飛龍來源在連接之后,你可以使用連接對象來定義你的模型。你需要指定模型的名稱,一個用于描述的屬性和一些可選的選項。在這個例子中,有個模型方法叫做。接收的第一個對象第二個參數(shù)被稱為屬性對象,它定義了所有的屬性。在屬性修改時自動保存模型。 譯者:飛龍 來源:Defining Models 在連接之后,你可以使用連接對象(db)來定義你的模型。你需要指定模型的名稱,一個用于描述的屬性和...

    gnehc 評論0 收藏0
  • orm2 中文文檔 5. 同步和刪除模型

    摘要:譯者飛龍來源同步是一項功能方法,可以在數(shù)據(jù)庫里為你的模型和關聯(lián)創(chuàng)建所需的表來工作。現(xiàn)存的表并不會被替換,它們只會在不存在的時候被創(chuàng)建。刪除也有兩種方式。從指定模型中刪除所有表和為模型創(chuàng)建表 譯者:飛龍 來源:Syncing and dropping models 同步是一項功能方法,可以在數(shù)據(jù)庫里為你的模型和關聯(lián)創(chuàng)建所需的表來工作?,F(xiàn)存的表并不會被替換,它們只會在不存在的時候被創(chuàng)建...

    LeanCloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<