2014-02-07 70 views
6

我試圖用骨幹驗證與骨幹Stickit正在驗證所有屬性,我希望在一個時間在用戶輸入他們來驗證一個屬性。但是,當用戶輸入值時,模型上的所有屬性都會得到驗證,而不僅僅是用戶已更改的屬性。我究竟做錯了什麼?與骨幹stickit骨幹驗證 - 當一個人改變

我的觀點:你經過setOptions

bindings:{ 
     '#username' : { 
      observe:'username', 
      setOptions: { 
       validate:true 
      } 
     }, 

     '#email' : { 
      observe:'email', 
      setOptions: { 
       validate:true 
      } 
     }, 

     '#firstname' : { 
      observe:'firstName', 
      setOptions: { 
       validate:true 
      } 
     }, 

....... 

onShow: function(){  
     Backbone.Validation.bind(this, { 
       valid: function(view, attr) { 
       alert('VALID - ' + attr); 
       }, 
       invalid: function(view, attr, error) { 
       alert('INVALID - ' + attr); 
       } 
      }); 

     this.stickit(); 

    }, 
+0

曾解決過這個? –

+0

解決這個任何機會?卡住相同的問題 –

+0

對不起,我從來沒有解決過這個問題。從我記憶中,並從閱讀yousefcisco的迴應,這是由於骨幹模型的行爲 – Francium123

回答

2

一切都在模型(1)設定值時使用。當您將validate: true傳遞給Backbone模型的設置函數時,它將驗證模型中的值以及傳遞給設置函數(2)的值,這意味着每次設置新值時都會驗證整個模型,現在重新看到。你沒有做錯什麼。

你也許可以通過您的驗證分割成多個獨立的功能,並呼籲只在屬性變化所需的項目,然後更改驗證函數來調用所有這些獨立的功能來驗證整個模型解決這個問題。

+0

您可以請詳細說明嗎? –

+1

這裏的主要問題是Backbone會在通過「validate:true」時驗證整個模型。解決這個問題的方法之一是創建單獨的驗證功能(例如,validateCountry,validatePhone),然後設置事件監聽器以更改國家和電話以觸發驗證功能。但是,這種解決方案並不好,並且會增加整個應用程序的複雜性。下面是這個解決方案看起來不完整的要點(它太複雜了,不能完成)https://gist.github.com/yousefcisco/5ba5d571eff103650c87 – yousefcisco

0

這也發生在我身上。在我的情況下,我將模型中的默認值設置爲''(空白)。刪除它們,它使用YOUT視圖綁定您的backbone.stickitsetOptions對象上backbone.validationforceUpdate參數工作

0

嘗試。這對我有效,我有一種類似的問題。

就像yousefcisco提到的那樣,主幹會根據傳遞的選項驗證模型中的所有屬性,但在我的情況下並不是我需要單獨驗證每個屬性,但屬性沒有即使只有一個屬性是無效的,然後我嘗試了forceUpdate: true,並且它做到了它的魔力。

點擊此處查看:http://thedersen.com/projects/backbone-validation/#configuration/force-update

0

對於這個工作,你應該刪除默認值(至少對於屬性的驗證)從你的模型值

+0

你能解釋一下嗎?請閱讀如何改善您的答案 http://meta.stackoverflow.com/q/253804/3664960如果這實際上是您的答案 – davejal