gpt4 book ai didi

validation - Backbone.js 验证模型属性

转载 作者:行者123 更新时间:2023-12-04 01:29:42 24 4
gpt4 key购买 nike

我创建了一个非常简单的 Rails & Backbone 应用程序。到目前为止,验证是在 Rails 端执行的。现在我考虑实现主干验证。我是这样做的:

  createCampaign: (e) ->
_this= @
e.preventDefault()
attributes =
info: @getCountries()
time_start: @$('#start').val()
time_end: @$('#end').val()
@collection.create attributes,
wait: true
success: ->
@$('#errors').text('Campaign created!').addClass('correct')
@$('#create').removeAttr('disabled');
_this.clearFields('new_campaign')
error: -> @handleError

wait: true 没有任何反应。如果我把它注释掉,就会采取成功的行动。虽然我没有提供所需的意图数据。
我的模型和收藏

class SvitlaTest.Models.Campaign extends Backbone.Model
initialize: ->
@bind("error", @errorHandling)

validate: (attrs) ->
return "Please fill start time of the campaign." unless attrs.time_start
return "Please fill end time of the campaign." unless attrs.time_end
"Please fill Countrz & language fields." unless attrs.info
errorHandling: (model, event) ->
@$('#create').removeAttr('disabled');
@$('#errors').html(error)

class SvitlaTest.Collections.Campaigns extends Backbone.Collection
url: '/api/campaigns'

model: SvitlaTest.Models.Campaign

更新 1
我的模板 jst.eco

<form method="post" id="new_campaign" class="corners">
<p>
<label for="start" >Start time:</label>
<input type="text" id="start" name="start" autofocus="" length='30' maxlength='30' />
</p>
<p>
<label for="end" >End time:</label>
<input type="text" id="end" name="end" length='30' maxlength='30' />
</p>
<div id='country_list'>
<h4>Info:</h4>
<p class="country_element">
Country
<input type="text" class='country' id="country" />
Languages
<input type="text" class="languages" id="languages" />
</p>
</div>
<p>
<input type="submit" id="create" value="Create" />
</p>
</form>

根据您的评论:我正在使用 gems/backbone-on-rails-1.0.0.0
未输入任何信息
1) 当我运行时激活 wait: true
我正在使用 Chrome 。如果我单击提交按钮(触发 createCampaign)将字段留空,什么都不会发生!我正在查看控制台和网络选项卡
2) wait: true 注释掉:运行成功回调,然后什么都没有发生
输入的信息
有或没有 wait: true 新模型在 DB 中创建

更新
在 View 的初始化中添加:

initialize: ->
@collection.on('reset', @render,this)
@collection.on('add', @appendCampaign ,this)
@collection.on( "invalid", @handleInvalidState)
handleInvalidState: (model, error) ->
console.log "validation"
console.log model
console.log error

如果我注释掉 wait: true 然后我得到这个控制台输出

validation 
Campaign {cid: "c2", attributes: Object, collection: Campaigns, _changing: false, _previousAttributes: Object…}
Please fill start time of the campaign.

如果我不把它注释掉,什么也不会发生......不知道为什么会这样

最佳答案

在您对 Backbone 模型实现验证之前,您需要了解您在模型中实现的验证方法究竟是如何使用的。 Backbone 验证确保模型不会处于错误状态(包含错误数据)。这意味着如果您尝试在导致验证失败的模型上设置任何数据,则不会发送数据。在这种情况下,会触发“无效”事件。

因此,作为起点,我首先要为集合中的“无效”事件添加一个回调。

@collection.on "invalid", @handleInvalidState

handleInvalidState: (model, error) ->
// do something with the error.

这至少会告诉您验证是否确实阻止了请求的发生。

根据源代码显示,如果模型在集合的创建方法中验证失败,它只会返回 false。这可能就是您看不到任何事情发生的原因。

希望这对您有所帮助!

关于validation - Backbone.js 验证模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16054056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com