2

それぞれ異なるモデルを使用して、2 つの異なるバックボーン コレクションに戻る 2 つのデータセットがあります。両方のモデルは、それらをリンクするために使用できるフィールドを共有しています。

2 番目の ajax 呼び出しは、一種のプリローダーとして、最初の呼び出しがロードされた後に行われます。

2 番目のコレクションが (「リセット」イベントで) 正常にフェッチされたら、共通フィールドに同じ値を使用して、何らかの方法でモデルをバインド/結合 (または単に JSON をコピーします。これは一方通行の読み取り専用です) したいと考えています。一致する他の各モデルのプロパティ。

読み直して、あまりよく読んでいないと思いますが、うまくいけば理解できます...

コレクション 1

[
  {
    foo: 'text',
    bar: 'xxx'
  },
  {
    foo: 'text',
    bar: 'yyy'
  }
]

コレクション 2

[
  {
    prop1: 'a',
    prop2: 'b',
    bar: 'xxx'
  }
]

生データが追加された場合でも、バインディングが確立された場合でも、コレクション 1 の JSON をこのように読み取れるようにしたい

[
  {
    foo: 'text',
    bar: 'xxx',
    prop1: 'a',
    prop2: 'b',
  },
  {
    foo: 'text',
    bar: 'yyy'
  }
]

または

[
  {
    foo: 'text',
    bar: 'xxx',
    extraProps: {
      prop1: 'a',
      prop2: 'b'
    }
  },
  {
    foo: 'text',
    bar: 'yyy'
  }
]

どんな助けでも大歓迎です。それを達成できると私が考えているすべての方法は、あまりバックボーン的ではないようです

PS: この質問にタグを付けているときに、バックボーン リレーショナル タグに気付きました。私はそこを読んで、役に立つものがあれば投稿します。良い検索フレーズを形成するのは非常に難しい質問です...

編集

返信ありがとうございます。簡単なスクリプトを書くために立ち去ったところ、完了する前にいくつかの返信があることに気付きました。とにかく、参考までに、最初の、おそらく非常に怪しいスクリプトを追加します。mailing/mailing_id に同じフィールド名がないという事実を無視してください。現時点ではデータ ソースを制御できません...

<script>
var matches = 0;
_.each(clicks.models, function(click) {
  _.each(mailshots.models, function(mailshot){
    if(click.get('mailing') == mailshot.get('mailing_id')){
      matches++;
      click.set('subject',mailshot.get('mailing_subject'));
    }
  });
});
if(matches) clicks.trigger('reset');
</script>

とにかく、それはうまくいきます。しかし、最初の応答をテストして、バックボーン リレーショナルを一目見ようと思います。今は必要以上かもしれませんが、面白そうです...

4

1 に答える 1

4

2 つのコレクションが読み込まれると、次のようなことができます

_(collection2).each(function(v,i){
 var model = collection1.where({bar:v.get("bar")}).first();// assuming values of bar are unique
 model.set("prop1",v.get("prop1"));
 model.set("prop2",v.get("prop2"));
})

そしてよりダイナミックに

 _(collection2).each(function(v,i){
     var model = collection1.where({bar:v.get("bar")}).first();// assuming values of bar are unique
     _.each(_.keys(v),function(k){
          model.set(v,v.get(k));
        });
})
于 2012-05-18T09:13:49.967 に答える