2

これは、Knockoutjs.comサイトのKnockoutカスケードカートエディターのライブ例のコードと、ネストされた配列をバインドするデータバインディングのRP Niemeyerの例を組み合わせて、Niemeyerによって提供された機能形式の製品オプションで拡張されたカスケードカートを実現するための私のフィドルの試みです。

  1. 数量フィールドで小計が更新されないのはなぜですか?
  2. 「削除」が機能しないのはなぜですか?
  3. formatCurrency(price)が「バインディングを解析できません」というエラーを生成するのはなぜですか?
  4. 製品フィールドを変更しても価格が更新されないのに、[製品の追加]ボタンを押すと、変更が次の行に表示されるのはなぜですか?
  5. Niemeyerの例では、「add-product」であり、「subtotal」メソッド用にコピーしたcartLineではなく、関数のスコープ内のメソッドです。これらの操作を処理するのに適した場所はどれですか。

S.Sanderson、RPNiemeyer、J.Papaの、ノックアウトを促進するためのコミュニティでの信じられないほどの努力に感謝します。それは素晴らしいです!

4

1 に答える 1

3

さて、あなたのフィドルは必要以上に複雑ですが、拡張を計画している場合に備えて、構造をそのままにしておくようにしました。いくつか質問がありますが、最後にそれらについて説明します。まず、あなたの質問:

  1. 各オブジェクト(ライン、カテゴリ、および製品)に1つずつ、いくつかの数量および小計のプロパティがありました。あなたのレイヤリングは彼らを混乱させました(そして私は正直に言って)。モデルの余分な数量と小計のプロパティを削除しましたが、とにかく意味がありませんでしたが、データに残しました。あなたは本当にこれがどのように見えるかを整理する必要があります。

  2. レイヤリングが間違っていました。removeLineはcartLineで関数を探して製品を送信していましたが、viewmodelに関数があり、cartLineが必要でした。削除行を最も外側のコンテキストに移動すると、これが修正されました。

  3. このエラーは発生しませんでした。

  4. 価格が適切に更新されていませんでした。これはコンテキスト階層の問題でした。

  5. ニーマイヤーの間違ったフィドルにリンクしたと思います。リンクしたフィドルには製品が含まれていません。

これがあなたのコードのための実用的なフィドルです。繰り返しになりますが、必要以上に混乱しないようにしたので、まだ少し厄介です。ただし、データやビューモデルの再構築を検討する必要がありますが、これほど複雑である必要はありません。ただし、ビューモデルと一致しなかったため、レイヤーの一部を削除しました。

また、category.subscribeメソッドは、小計の計算されたオブザーバブルの内側にありました。私はそれをモデルの外に移動しました。

注:私はフィドルでknockout2.0を使用しています。更新を検討してください。Knockout1.3Betaは同じ方法で制御フローを実装していません。これにより、私が話していない別のエラーが発生していました。

だから、私の質問:

  1. データとオブジェクトの定義に製品とオプションの両方に数量があるのはなぜですか?
  2. 製品、カテゴリ、cartLineのそれぞれに小計があるのはなぜですか?
  3. メニューとビューモデルに総計があるのはなぜですか?3a。メニューに総計があるのはなぜですか?これは意味がありません。
于 2012-06-04T22:06:50.217 に答える