如果子模型无效,则防止保存
Prevent saving if child model is invalid?
我有一个总线模型,它有一个嵌套的路由模型。
class Busables.Models.Bus extends Backbone.Model
url: '/buses'
defaults:
route: new Busables.Models.Route()
然后我有一个总体错误视图,它侦听总线模型的error
事件及其路由。
class Busables.Views.Errors extends Backbone.View
el: '#error-area'
template: JST['shared/error']
# model in this instance is a bus
initialize: ->
@model.get('route').bind 'error', this.routeError, this
@model.bind 'error', this.busError, this
因此,当用户在页面上提交表单时,我保存总线的一个属性,并将其发送到服务器:
class Busables.Views.NewBus extends Backbone.View
...
saveBus: (event) ->
event.preventDefault()
@model.save {
seats: this.$('#bus_seats').val(),
}, {
success: (model, response) ->
console.log "Success. The model and response: ", model, response
window.location.href = "/buses/#{response.id}"
}
那么问题是,当我保存总线时,如何触发嵌套路由的验证?
您需要重写总线上的validate
方法,并让它调用嵌套路由的验证。
validate
方法被称为任何时候你的模型更新或被保存,给你一个机会,以防止无效的数据使它的方式进入你的模型或返回到服务器。如果您从validate
方法返回的任何值不是false,那么validate方法将阻止保存或属性更新。
Bus = Backbone.Model.extend({
validate: function(attrs){
var invalidBus = false; // do your real bus validation here
var route = this.get("route");
var invalidRoute = route.validate(route.toJSON());
return invalidBus || invalidRoute;
}
});
Route = Backbone.Model.extend({
validate: function(attrs){
// do your route validation here
// return an 'invalid' status
}
});
我还建议你看看Backbone-Relational插件。它为你处理了很多这样的事情,如果你自己这样做,你很有可能会重写插件中已经可用的代码。
相关文章:
- 主干:如何保存模型集合中模型的属性更改
- 保存模型返回错误
- 猫鼬数据不会保存模型的新实例
- 主干:在单个请求中批量保存模型
- 如何使用轨迹选项进行选择,以角度保存模型中的选定对象
- JavascriptMVC - 保存模型时的验证错误
- 主干网.js - 在不保存模型的情况下发出 POST 请求
- EmberJS无法调用方法'查找'保存模型时未定义的
- 保存模型后无法重新渲染主干视图
- Django通过JS而不是表单提交来保存模型
- 在使用具有隔离作用域的指令时保存模型值不起作用
- Backbone.js保存模型don't在android 2.x上引起ajax PUT请求
- 保存模型时,只将所需的插件加载到架构中
- 保存模型记录不起作用(Spine)
- 保存模型时更新主干视图
- 从three.js中保存模型
- 余烬:下划线模型名称在JSON中保存模型
- 在AngularJS中保存模型的静态副本
- 主干保存模型问题
- Backbone.js保存模型的属性是其他模型的数组