<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 模型鉤子 > 譯者:[飛龍](https://github.com/wizardforcel) > 來源:[Model Hooks](https://github.com/dresende/node-orm2/wiki/Model-Hooks) 如果你想要監聽發生在模型實例上的事件,你可以附帶一個函數,它會在發生時調用。 現在支持下面這些事件: + `afterLoad`:(無參數)加載和準備所用實例之后; + `afterAutoFetch`:(無參數)自動獲取關聯(如果有的話)之后,無論有沒有關聯都會觸發; + `beforeSave`:(無參數)嘗試保存之前; + `afterSave`:(bool success)保存之后; + `beforeCreate`:(無參數)嘗試保存新的實例之前(優先于`beforeSave`); + `afterCreate`:(bool success)保存新的實例之后; + `beforeRemove`:(無參數)嘗試刪除實例之前; + `afterRemove`:(bool success)刪除實例之后; + `beforeValidation`:(無參數)在所有驗證之前,優先于`beforeCreate`和`beforeSave`。 所有鉤子函數調用時,`this`為對應的實例,所以你可以訪問到與之相關的任何東西。 對于所有`before*`鉤子,你可以添加一個額外的參數到鉤子函數中。這個函數用來告訴鉤子應該繼續執行下去還是中斷。你或許已經從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(); } } }); ``` 這個工作流允許你在調用`next`之前執行異步的操作。如果你不打算使用`next`就不要把它定義為參數,否則會阻塞工作流。 ## 常見問題 一個常見問題涉及到在鉤子內部的嵌套回調中訪問`this`。這個問題的原因是,`this`對象僅僅在頂級鉤子函數的作用域內是有效的,而在回調中會有各種不同的值。要解決這一問題,可以創建一個對象保存`this`的引用,并且在回調中用它來訪問模型的屬性。 **示例** ``` 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(); } } } }); ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看