5

質問:ドキュメントは不足しており、私は初心者のようなものです。Backbone.Views を (backbone-relational.js から) Backbone.RelationalModel のインスタンスにバインドする適切な (あると仮定して) 方法を誰かが確認できますか? DOMへの更新/レンダリング? バックボーンの通常のモデル/ビュー バインディングに基づいて、いくつかの異なるアプローチを試しましたが、ほとんど成功しませんでした。

裏話 (/詳細): 私は Backbone.js でロープを学んでおり、この 1 週間で多くのことを学ばなければなりませんでした。明らかな何かが不足している場合 (これは非常に可能性が高いです - 以下の問題を処理する「正しい」方法を含む)、私に連絡してください。

私は、ネストされた辞書を大いに活用するmongodb-backed RESTインターフェース(完全に制御できない-またはサーバー側で動作を再構築する)を扱っているので、バックボーンでそれを最もよく表現する方法を読んでください(バックボーンが提供する優れたsave()+サーバー同期のものを壊さないでください)。

backbone-relationalligament.jsの2 つのオプションを見てきました。

私は backbone-relational.js から始めて、REST インターフェースによって返されるツリー内のさまざまな辞書用に作成された RelationalModels (Backbone の標準モデルに代わる backbone-relational のモデル) を持っています。それらの間の関係が定義されており、各モデルからの JSON を (それぞれの初期化関数で) ログに記録するコンソールは、全体的なコレクション レベルで fetch() コマンドでサーバーからすべてが正しく呼び出され、読み込まれていることを示しています。

それで、それはすべて素晴らしいです。

問題: 私は、これらの各モデル (および dom でテンプレートをレンダリングする必要があるバインドされた関数) の更新を「リッスン」しているビューを持っています。メイン ビューは fetch() で起動します。問題ありません。「トップ レベル」モデルをロードして dom にレンダリングしますが、その「トップ レベル」モデル内の「外部キー」モデルを表すビューは決して実行しません (上記の各モデルのコンソール ログによって証明されるように、データは確実に各モデルに読み込まれます)。

どんな洞察も非常に高く評価されます。

以下の Raynos の返信への直接の応答 (Raynos に感謝します!): サーバー上の (UpperLevelCollection url)/(UpperLevelModel id) に存在する UpperLevelModels を使用して、UpperLevelCollection のベース URL を定義した場合、これらの LowerLevelCollections を辞書キーにマップするにはどうすればよいですか?サーバー側からの各 UpperLevelModel の 1 つの JSON ダンプ? 言い換えれば、モデル内でコレクションを使用すると、このようにサーバーからのデータ ダンプを適切に処理し (明らかに非常に単純化されていますが、問題が発生します)、適切に保存/更新/同期することができますか?

[{
    "some_key": "Some string",
    "labels": ["A","List","Of","Strings"],
    "content": [{
        "id": "12345"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    },{
        "id": "67890"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    }],
}]
4

2 に答える 2

2

一般的にネストされた辞書の場合、私は次のアプローチを取ります

var UpperLevelCollection = Backbone.Collection.extend({
    model: UpperLevelModel
  }),
  UpperLevelModel = Backbone.model.extend({
    initialize: function() {
      this.nested = new LowerLevelCollection;
    }
  }),
  LowerLevelCollection = Backbone.Collection.extend({
    model: LowerLevelModel
  }),
  LowerLevelModel = Backbone.Model.extend({});

これらのコレクションをモデル内にネストするだけです。

于 2011-06-21T22:40:03.633 に答える
1

問題は、ParentModel に新しいデータをロードするときに、子コレクションの AFAIK が実際にはフェッチされず、ワイプされて新しいコレクションに置き換えられることです (backbone-relational.js の 584 行目の Backbone.HasMany.OnChange を参照)。したがって、子コレクションに対する独自のバインディングはなくなります。

私の意見では、これはバックボーンリレーショナルの弱点です。この動作は構成可能であり、消去と置換の代わりに低速の検索と更新のアプローチが使用されるオプションがあります。

于 2012-01-10T09:29:23.660 に答える