由于我将Backbone从0.9.2升级到0.9.9,我收到了一些错误。
当我使用哈希默认值实例化新模型时。调用validate方法是为了验证这些值并失败。
基本上我想用新消息设置contactModel,但是这条消息应该与默认消息不同。这就是此模型实例验证失败的原因。 这与主干0.9.2一起工作正常,因为验证方法没有在实例中调用。
有人可以解释这有什么问题吗?
这是我的BackboneModel:
class ContactModel extends Backbone.Model
defaults :
message : 'Initial message'
validate : ( attrs_ ) =>
if attrs_.message.toString() is @.defaults.message.toString()
return 'Same message'
if attrs_.message.length < 55
return 'Your message is too short buddy'
sync : =>
#Custom Sync implementation
这是我的BackboneView:
class ContactPageView extends AbstractView
id : 'contact-page'
template : null
model : null
events :
'keypress #contactTextArea' : 'onKeyPress'
'submit #contactForm' : 'submit'
init : ->
@model = new ContactModel()
console.log @model.get 'message'
#Print "undefined"
@model.bind "success", @success, this
@model.bind "error", @error, this
@template = _.template $( '#template_page_contact' ).html()
答案 0 :(得分:3)
在Backbone 0.9.9中,模型验证的语义已更改,因此验证应确保模型永远处于无效状态,即使模型初始化也是如此。通过此更改,模型实例化将失败,因为规则attrs_.message.toString() is @.defaults.message.toString()
,并且无法绕过它。
但是,稍后回滚了更改,并且放宽了验证以允许无效状态直到保存模型。我认为这将在下一个Backbone版本中提供,但目前还没有公开版本可以进行此更改。 This GitHub issue page讨论了为什么要对0.9.9进行更改,以及如何更改下一版本。
与此同时,您可以更改验证逻辑,返回早期发布的版本,或使用unreleased master version,风险自负。