我创建了一个非常简单的 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
注释掉:运行成功回调,然后没有任何反应
输入的信息
在 DB 中创建
有无wait: true
新模型
视图初始化中添加的 更新:
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.
如果我不评论它什么都不会发生......不知道为什么会发生这种情况