Backbone.js模型 - 与服务器同步ID

时间:2012-10-08 16:56:47

标签: backbone.js

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

只是为了提供更多细节,我就像这样创建我的模型:

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您必须将生成的模型的ID传递回响应中的主干。因此,在您的控制器中,您可以执行以下操作:

def create = Action { implicit request =>
    employeeForm.bindFromRequest.fold(
      errors => BadRequest,
      employee => {
        Ok(Employee.create(employee).toString())
    })
}

然后定义模型的create方法,如:

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
   }
}

在视图中的backbone.js中定义create的成功回调,如下所示:

app.employeeList.create(@model,
      wait: true

      success: _.bind((model, response)->
        @model.set("id", response)

您还可以为返回的ID为0添加某种错误处理。此外,不确定您的后端使用的是什么,但此代码适用于Play 2 / Scala。 (对于CoffeeScript,如果你需要JS,请告诉我)