0

Backbonejsでのモデルの同期を理解するのに問題があります。新しいモデルをインスタンス化して保存すると、そのデータがバックエンドに送信されて永続化されます。ただし、その一意の識別子はバックエンドでも生成されます(自動インクリメント整数)。サーバーが成功を確認した後、この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
   }
}

そして、ビューのbackbone.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 に答える