2016-12-08 49 views
1

我有一個動態呈現的視圖。它可能有一些輸入或者可能沒有。 用戶填寫所有內容並嘗試發送數據後,我會呼叫this.model.isValid(true)(或this.model.isValid()),即使輸入數據有效,也會返回false使用Backbone.Validation跳過驗證模型屬性

我認爲原因是Backbone Validation試圖驗證我們沒有渲染的輸入的屬性。

如果我們沒有sticked視圖元素,是否有解決方案可跳過模型屬性?

UPDATE:

模型與此類似:

MyApp.module("RecordModel", function (RecordModel, MyApp, Backbone) { 
    RecordModel.recordModel = Backbone.Model.extend({ 
     validation: { 
      inn: { 
       pattern: 'inn', 
       msg: MyApp.messages.inn 
      }, 

      bik: { 
       pattern: 'bik', 
       msg: MyApp.messages.bik 
      }, 

      uin: { 
       pattern: 'uin', 
       msg: MyApp.messages.uin 
      }, 

      sum: { 
       pattern: 'sum', 
       msg: MyApp.messages.sum 
      } 

     } 
    }); 
}); 

綁定:

bindings: { 

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

     events: MyApp.Validation.events.inputEvents 
    }, 

    '#bik': { 
     observe: 'bik', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    }, 

    '#inn': { 
     observe: 'inn', 
      setOptions: { 
      validate: true 
     }, 
     events: ParkingMate.Validation.events.inputEvents 
    }, 

    '#sum': { 
     observe: 'sum', 
      setOptions: { 
      validate: true 
     }, 
     events: MyApp.Validation.events.inputEvents 
    } 
} 

因此,出於某種原因,我們不會渲染#sum輸入。因爲我們沒有在我們的DOM中獲得,所以在RecordModel中不存在,但骨幹網仍嘗試驗證它。或者,如果我們在DOM中有這個輸入,一切正常。

+0

需要一些額外的信息關於如何實現這些字段的模型驗證 –

+0

Denys是對的,請包括[mcve]。 –

回答

1

How can I allow empty values but still validate if the user enters something?

默認情況下,如果你配置一個驗證器的屬性,它是 視爲必需的。但是,如果要允許空值,並且 在輸入內容時仍然有效,請將required: false添加到 除其他驗證程序外。

validation: { 
    value: { 
     min: 1, 
     required: false 
    } 
} 

如果你不能讓空值(如在創建),Backbone.validation overrides isValid增加功能的默認行爲。有趣的是數組參數我們可以通過:

// Check if name and age are valid 
var isValid = model.isValid(['name', 'age']); 

有了這一點,那麼我們就可以驗證只存在於模型內,此刻的字段:

model.isValid(_.keys(model.attributes)); 
+1

請參閱更新。你的第二個解決方案相當不錯,但我不會試着'model.attributes'來嘗試收集呈現的輸入id,並將它們作爲'model.isValid()'中的參數傳遞,因爲輸入和屬性名稱的ID匹配。 – nllsdfx

+0

@DmitrySoroka是的,你的技術會奏效。我使用'_.keys'的例子只是爲了演示一種方式,但可能無法在你的上下文中使用。 –

相關問題