1

私は Backbone.js を学習中です。見ているものが気に入っていますが、何かがはっきりしていません... 既にページにあるデータを処理する最善の方法は何ですか? それらすべてを調べて、それぞれのモデルを作成することをお勧めします。

$('element').each(function() {
     var model = new Model();
     collection.add(model);
});

または、ページをロードしてから、データを取得してそこから処理する必要があります。

または、これを行うためのより良い方法はありますか?

編集

サーバー側の場合、データをループしてページでブートストラップします

サーバ側

<div>
    <p>{{ model.someInformation }}</p>
</div>

新しいモデルを直接インスタンス化する必要がありますか?

<script>
    Backbone.Model.extend({
        var model = new Model();
    });
</script>

ブートストラップhttp://backbonejs.org/#FAQ-bootstrapでコレクションのリセットについて読みましたが、得られないものがあるようです...コレクションにモデルを追加する必要があると思いました。私のモデルは、コレクションの用途がどこかでインスタンス化されましresetた...私はここで少し迷っています。

編集 2

私は自分のアプリを次のように動作させることができました:

$('#active-cards .card').each(function(i) {
     window['card' + i] = new Card(),
         window['cardView' + i] = new CardView({ el: $(this) });
         id = $(this).attr('id'),
         name = $(this).find('input[name="name"]').val(),
         client =  $(this).find('input[name="client"]').val(),
         field =  $(this).find('input[name="field"]').val();
     window['card' + i].set({ id: id, name: name, client: client, field: field });
     cards.add(window['card' + i]);
});

この後、次のようにしてモデルを見つけることができます

var id = this.$el.attr('id');
var card = cards.get(id);
4

2 に答える 2

1

いいえ、通常はそのようにはしません。ページの読み込み時にコレクションを作成しようとしているようです。バックボーンのドキュメントにはこれに関するセクションがあり、ブートストラップと呼ばれています。

編集してコメントに答える
頭を理解するのは奇妙な概念かもしれませんが、コレクションに追加する前にモデルをインスタンス化する必要はありません。リセットのドキュメントに従って:

モデル (または属性ハッシュ) の新しいリストでコレクションを置き換えるには、reset を使用します。

したがって、コレクションを使用すると、modelプロパティを指定してから、オブジェクト リテラルの配列を追加するだけです。例えば:

UserCollection = Backbone.Collection.extend({
   model: User
});
myUserCollection = new UserCollection();
myUserCollection.reset([
   {
      name: "Bob",
      age: 25
   }, {
      name: "Foo",
      age: 26
   }
]);

myUserCollection2 つUserのモデルが含まれるようになりました。

2 番目の編集
まだ概念を十分に理解していないと思います。これがあなたが達成しようとしていると私が思うものです:http://jsfiddle.net/67E6t/

于 2013-03-23T15:57:24.513 に答える
0

したがって、初期モデルをコレクションにブートストラップする場合は、初期モデルをサーバー側からコレクションに直接配置します。

<script>
  var myCol = new Backbone.Collection;
  accounts.reset(models_prepared_in_server>); //you utilize your server side to replace the models_prepared_in_server with your actual data.
</script>

そのため、ページがクライアント側に転送されると、コードは次のようになります (例として):

<script>
  var myCol = new Backbone.Collection;
  myCol.reset([
     { name: model1,
       some_prop: prop_value;
     },
     { name: model2,
       some_prop: prop_value2;
     }
  ]);
</script>

そのため、スクリプトがブラウザによって実行された後、 にmyColモデルが入力されます。

于 2013-03-24T14:55:40.877 に答える