0

私はbackbone.jsが初めてで、単純なモデルを安らかなAPIで機能させようとしていますが、単純なPOST操作を機能させることができません。

モデル要素にプロパティ「id」が設定されておらず、save()関数が呼び出された場合、モデルはサーバー(モデルのURL)にポストコマンドを発行し、 HttpStatus.OK (200) とアイテムの新しい ID。

ここにJSコードがあります:

  this.model = new MYAPP.menuItem();
  this.model.save();
  console.debug("the new id is:", this.model.get("id")) <-- this is undefined

私はサーバー側としてスプリングコントローラーを使用しています。これはコントローラーのコードです

@RequestMapping(value = "/menuItem",method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK )
@ResponseBody
public Long addmenuItem(Model model) {
    return new Long(1);
}

Post 呼び出しはサーバーに正常に到達し、コントローラーが呼び出されますが、モデルの ID が更新されていないことがわかります。

私は何を間違っていますか?

ありがとう。

要求された追加コード:

    initialize: function() {
  console.debug("initializing new view");
  this.model = new MYAPP.Event();
  this.model.save({
      success: function( model ) {
        console.log( model.get('id') );
      }
    });
  var source   = $("#index-template").html();
  this.template = Handlebars.compile(source);
  console.debug("view collection", this.model);
  this.model.on('all', this.render, this);
  //this.recipes.fetch();
},

ぐちゃぐちゃでごめんなさい!

4

1 に答える 1

2

.save()メソッドは非同期です。そのため、idサーバーからすぐには返されません。次のようにしてみてください。

var self = this;
this.model.save().done(function() { console.log( self.model.get('id') ); });

編集オブジェクトへの参照に問題があるため、次の方法で同じ結果が得られます。

this.model.save({
  success: function( model ) {
    console.log( model.get('id') );
  }
});

いくつかのチャットの後に編集返されたデータが有効ではなかったようです。保存後、サーバーは json (id 付き) でエンコードされた完全なオブジェクトを返す必要があります。

于 2013-01-13T21:05:49.440 に答える