1

私のバックグラウンドは、フロントエンドよりもサーバーサイドです。そのため、基本的なフロントエンドの知識が不足している可能性があります。

というエンドポイントがあります

/quotations/:id/products

これは、POST アクションを実行する場合、指定された見積もりに製品を追加することを意味します。ここで、:id は見積もり ID を表します。

私のスキーマでは、見積もりと製品は多対多の関係にあります。

エンドポイントは、データが の形式で送信されることも想定していますproducts[]

つまり、id 2、7、154 の商品を見積書に追加したい場合 3

私は投稿しています

<input name="products[]" value="2" />
<input name="products[]" value="7" />
<input name="products[]" value="154" />

URLへ/quotations/3/products

私の質問は、このセットアップでバックボーンを使用してモデルとビューを作成するにはどうすればよいですか?

Backbone.js アプリケーションの開発に関する Addy Osmani の本を購入しました。だから私は彼の例に似たバックボーンをセットアップしました。

単純な追加モデルの例のみがあります。

うまくいけば、Osmani が子供を親タイプの行動に追加するために設定した規則に従う答えが得られることを願っています。

Osmani はBackbone Relationalについても言及しました。

これを使用する必要があるかどうか、またはどのように使用するかさえわかりません。ドキュメントを読みましたが、これを Osmani が Backbone サンプル アプリを構成する方法に適合させる方法がわかりません。

アップデート:

成功した場合は、ページを という別のページにリダイレクトします/success

失敗した場合は、ページのどこかに失敗メッセージを表示したいです。<div id="message"></div>更新する必要があるとします。

つまり、失敗した場合、ページは単一ページ アプリのままになります。

成功すると、ページは別のページに移動します。

JSON 応答などを返すサーバー側のコードについては、問題なく実行できます。PHPを使用しているとします。

4

1 に答える 1

2

最近、同様の問題に直面しました。これが最善の方法であるとは断言できませんが、確実に機能することがわかった方法です。BackboneRelational を試しましたが、問題がありました。

これは、Quote オブジェクトと ProductQuotation を 1 ステップで作成する必要があることを前提としています。

  • 新しい見積もりの​​ビューを設定する

  • このビューの初期化時:

    A) 新しい空の見積もりモデルを作成する

    B) ProductQuotes の新しいコレクションを作成する

    C) 追加する ProductQuote ごとに新しい ProductQuote ビューを作成する

    D) Quote ビューをカスタム バックボーン イベント バインディングにサブスクライブします (バックボーン JS: あるビューは他のビューで更新をトリガーできますか? )、つまり

    Backbone.pubSub.on('quote_new-product-save', this.AddProduct, this)

    このビューは、このイベントをトリガーするたびに AddProduct を呼び出すようになりました。

  • 各 ProductQuote ビューの初期化時に、新しい Product モデルを作成します

  • ユーザーが該当する情報を入力できるようにこのビューを配線し、完了したら、この情報をそのビューの製品モデルに設定し、上記の「quote_new-product-save」イベントをトリガーして、その製品モデルを渡します。

  • Quote ビューに戻ると、このイベントにバインドされているため、AddProduct が自動的に呼び出されます。これを配線して、新しい Product モデルを受け取り、それを ProductQuotes コレクションに追加する必要があります。

  • これで、Product モデル データが ProductQuotes コレクションに設定されましたが、これはまだ現在の Quote (まだ保存されていません) に直接リンクされていないため、モデルの 'order_items' 属性を ProductQuote コレクションのすべてのモデルに設定します。すなわち

    this.model.set('product_quotes', this.collection.models)

これで、保存されていない Quote モデルには、ProductQuotes コレクションのすべてのメンバーが属性として設定されます。

ここで、Quote モデルで save を呼び出し、データをサーバーに送信する必要があります。ここで留意すべきことは、urlRoot が適切に設定されていることと、サーバーに送信されるデータが適切にフォーマットされていることです。Quote モデルで toJSON メソッドをオーバーライドする方法については、「入れ子になったオブジェクトを Rails、backbone.js、accepts_nested_attributes_for で保存する」を読むことをお勧めします。

于 2013-03-07T15:31:31.163 に答える