2012-12-30 101 views
0

我想知道爲什麼我的模型上的Validate方法在將模型添加到集合時多次運行。骨幹驗證多次發射

即使我剝我的模型驗證一直到這...

Client.Model = Backbone.Model.extend ({ 

    validate : function(attrs) { 
     if (!attrs.first_name){ 
      return 'Required'; 
     } 
    } 

}); 

如果我從validate方法,我可以看到它被稱爲5次內CONSOLE.LOG()。前兩個驗證成功,第三個失敗,然後第四個和第五個也通過(並隨後在服務器上同步正確)

這是創建一個問題,因爲我正在構建一個自定義消息插件並且正在調用它所有5次驗證發生。

我知道當我創建一個新模型並從服務器檢索模型時它會被正確地調用。但是我不明白的是,這個「第三」電話驗證總是失敗。 (順便說一句,我設法弄清楚它是不是服務器的問題)提前

我想知道什麼我缺少這裏..

感謝。

:)

JSBIN - http://jsbin.com/ucowoq/2/edit

檢查控制檯,顯然有與POST的錯誤,但它顯示了運行5次的驗證方法,在我的應用程序,它無法證實3號每次!服務器只會返回500錯誤或創建的模型的JSON。

希望這可以幫助任何人看這個。

編輯: 我想出了這個黑客讓一切正常工作。我仍然不滿意被調用5次的驗證方法,但是因爲導致驗證失敗的1次事件包含一個對象,其中包含鍵值爲&'未定義'的值,我只是在返回任何內容之前檢查它。這使我可以實現我的'消息'插件,因爲我現在可以在正確的時間檢索錯誤。

validate: function(attrs){ 
     if (attrs.first_name !== undefined){ 
     if (!attrs.first_name) 
      return 'first name required'; 
     } 
    } 
+0

Uncaught TypeError:無法調用未定義的方法'extend'...在jsbin – mpm

回答

1

引起此混淆的線是:Backbone 0.9.9 Line 411它在再次設置它們之前清除模型的屬性。

爲什麼它有關係?它將無法驗證,是真的,但驗證的結果從未在任何地方使用,所以您不應該在編輯時需要檢查未定義的檢查。

+1

這很重要,因爲如果您想從服務器發送錯誤消息,那麼您需要通過錯誤響應回調檢索它們,並且不顯示破綻上面,你會得到這個錯誤的驗證造成混亂。 – shane