0

我在理解 Backbone js 中的模型同步时遇到了一些麻烦。当我实例化并保存一个新模型时,它的数据被发送到后端进行持久化。但是,它的唯一标识符也会在后端生成(一个自动递增的整数)。服务器确认成功后,我需要此 ID 属性立即在模型上可用。我该怎么做呢?

只是为了提供更多细节,我正在创建我的模型,如下所示:

this.collection.create(modelData, {wait: true}

我希望新创建的模型有一个 ID 属性,其值是在后端生成的。

4

2 回答 2

1

在这种情况下,文档阅读不佳。原来骨干同步需要来自服务器的 JSON 响应,指示您希望在模型上设置的额外/更改的属性,这正是我正在寻找的。

于 2012-10-10T10:06:51.120 回答
0

您必须在响应中将生成模型的 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,请告诉我)

于 2012-10-08T17:02:31.463 回答