我在理解 Backbone js 中的模型同步时遇到了一些麻烦。当我实例化并保存一个新模型时,它的数据被发送到后端进行持久化。但是,它的唯一标识符也会在后端生成(一个自动递增的整数)。服务器确认成功后,我需要此 ID 属性立即在模型上可用。我该怎么做呢?
只是为了提供更多细节,我正在创建我的模型,如下所示:
this.collection.create(modelData, {wait: true}
我希望新创建的模型有一个 ID 属性,其值是在后端生成的。
我在理解 Backbone js 中的模型同步时遇到了一些麻烦。当我实例化并保存一个新模型时,它的数据被发送到后端进行持久化。但是,它的唯一标识符也会在后端生成(一个自动递增的整数)。服务器确认成功后,我需要此 ID 属性立即在模型上可用。我该怎么做呢?
只是为了提供更多细节,我正在创建我的模型,如下所示:
this.collection.create(modelData, {wait: true}
我希望新创建的模型有一个 ID 属性,其值是在后端生成的。
在这种情况下,文档阅读不佳。原来骨干同步需要来自服务器的 JSON 响应,指示您希望在模型上设置的额外/更改的属性,这正是我正在寻找的。
您必须在响应中将生成模型的 ID 传递回主干。因此,在您的控制器中,您可以执行以下操作:
def create = Action { implicit request =>
employeeForm.bindFromRequest.fold(
errors => BadRequest,
employee => {
Ok(Employee.create(employee).toString())
})
}
然后定义模型的创建方法,如:
def create(employee: Employee): Long = {
DB.withConnection { implicit connection =>
SQL("insert into employee(first_name, last_name) values ({fname}, {lname})").on(
'fname -> employee.fname,
'lname -> employee.lname
).executeInsert()
} match {
case Some(long) => long
case None => 0
}
}
在您的视图中的主干.js 中,为 create 定义成功回调,如下所示:
app.employeeList.create(@model,
wait: true
success: _.bind((model, response)->
@model.set("id", response)
您还可以为返回的 ID 0 添加某种错误处理。此外,不确定您的后端使用的是什么,但此代码适用于 Play 2/Scala。(对于 CoffeeScript 感到抱歉,如果您需要 JS,请告诉我)