2012-03-09 52 views
2

我想了解Backbone.js模型驗證如何工作,但我看到一些奇怪的不一致。在我的應用程序的一個地方,validate方法正在按預期調用。然而,在另一個地方,Backbone.js似乎將一個{ silent: true }對象傳遞給驗證器,儘管我不想要它。Backbone.js模型驗證方法未能觸發

這是一個說明問題的jsFiddle。應該調用validate方法單擊「複製」按鈕或更改值時,但當我單步執行代碼時,很明顯_validate函數正在通過{ silent: true }選項。

我錯過了什麼?

更新:找出這裏發生了什麼。我創建了這個jsFiddle最初是爲了複製我遇到的問題,而這個問題實際上與此問題相反 - 我試圖向集合中添加一個空模型,並且驗證正在解僱並阻止我這樣做。但是,當我製作小提琴時,它工作正常,因爲我希望我的應用程序能夠正常工作。添加空模型時,驗證不會觸發。我無法弄清楚區別。

原來我在我的應用程序中使用了Backbone.js 0.9.0,在我的jsFiddle中使用了0.9.1版本。 Jeremy在0.9.1中對驗證進行了更改,使其按照我希望它在我的應用程序中工作的方式工作(請參閱GitHub上的this issue)。謎團已揭開。

+0

所以......每當產生一個新的項目,並沒有被設置爲它應該驗證? – JayC 2012-03-09 18:43:01

+0

是的。我知道在這個例子中這沒什麼意義,這是一個簡化的場景。在我工作的那部分應用程序中,只要將新模型添加到集合中,即使所有屬性都設置爲「null」,也會調用「驗證」。 – 2012-03-09 18:57:02

回答

3

骨幹特別是不調用_validate當你正在做一個新的模式。

傑里米建議你這樣做:

var mymodel = new MyModel(); 
mymodel.set({params}); 

這是我們在GitHub上交流:can't override silent:true