0

saveまたはがサーバーに向かって投げられるcreateと、サーバーは新しいランダムに作成されたオブジェクトで応答します。オブジェクトは多くの異なるクラスの 1 つになることができ、Backbone はこれらの差別化されたオブジェクトに応答し、相対ビューをロードします。

ビューがまだロードされていないため、ブートストラップでのみこのロジックを理解できるように見えるため、サーバーからランダムに受信している情報に基づいてブートストラップし、その特定のルートに移動できます。

ただし、オブジェクトを保存して戻りデータを受け取るときにこれを行う方法を理解しようとすることに固執しています。

これが私のコードを分解したものです。

情報が保存されます。

@model.save(@model.toJSON(),

私はこの保存を待っているリスナーを持っています:

constructor: (options) ->
  super(options)
  @model.bind 'change:verb', _.chooser, options

_.maestra_chooser は、ユーティリティ ベルトにある mixin です。

_.mixin
  _chooser : (item) =>
    console.log item

ここで注意すべきことがあります。item残念ながら、変数は@model保存されたばかりのものです。新しいデータはありません。

私が望んでitemいるのは、サーバーからの新しい変数データであり、そのデータを取得して、それがどのような種類のデータであるかを確認し、関連するビューにルーティングできます。

これは、私が建築的に不健全なアイデアを作っていると私が信じているところです。しかし、説明するのに十分な理由がわかりません。

サーバーからの戻りデータにアクセスし、アプリをそのそれぞれのルートに適切にナビゲートできる場所を知っている人はいますか?

追加情報

これは私が適切にブートストラップする方法です:

window.router = new Project.Routers.QuestionsRouter(
{
  words: #{ @words.to_json.html_safe }  
});

Backbone.history.start();

router.navigate("#{@words.kind_of?(Array) ? "bar" : "foo"}", {trigger: true, replace: true})    
4

1 に答える 1

1

change イベントは、変更されたモデルと値を提供するだけです...

保存に成功のコールバックを渡すことができます。

@model.save(@model.toJSON(), success: (model, resp) ->
    # do whatever with resp
)

whererespにはサーバーからの生の応答がmodel含まれ、モデルのサーバー側の状態が含まれます。

コメントに記載されているように、モデルの同期イベントにバインドすることもできます。

@model.bind 'sync', _.masetra_chooser, options

コールバックは次のsync引数で呼び出されます: model、resp、および options ここで、options は に渡されるオプションのセットですsavehttps://github.com/documentcloud/backbone/blob/9a12b7640f07839134e979b66df658b70e6e4fe9/backbone.js#L383

ただし、ページを変更する保存からデータを取得することを期待している理由はよくわかりません。少し奇妙に思えます。

保存後にモデルにないデータの種類を期待していますか?

于 2012-07-18T13:05:18.683 に答える