0

テンプレート作成にバックボーンとハンドルバーを使用していますが、これは初めてです。私の現在のjsonは以下の形式であり、コードは正常に機能します。

[
  {
    "id": "10",
    "info": {
        "name": "data10"
    }
  },
  {
    "id": "11",
    "info": {
        "name": "data11"
    }
  }

]

しかし、json構造を以下のようなものに変更すると、データを入力するのが困難になります。

{
"total_count": "10",
"dataElements": [
    {
        "id": "10",
        "info": {
            "name": "data10"
        }
    },
    {
        "id": "11",
        "info": {
            "name": "data11"
        }
    }
]
}

現在のコード構造を維持しながら、名前、情報、total_countを入力するにはどうすればよいですか?

JSFiddle: http: //jsfiddle.net/KTj2K/1/

どんな助けも本当に感謝しました。

4

1 に答える 1

2

これが機能するために必要ないくつかのこと。

コレクションのバックボーンのコア「リセット」を、渡すデータを理解するカスタムのものに置き換えます。例えば:

reset: function (data) {
    this.totalCount = data.total_count;
    Backbone.Collection.prototype.reset.call(this, data.dataElements);
}

コレクションをリセットすると、リセットするオブジェクトから total_count が引き出され、dataElement 配列で Backbone のコア リセットが使用されます。これをサーバーから取得する場合は、「parse」で同様のことを行う必要があることに注意してください。

(サンプルが作業中の実際のコードのように見える場合)、レンダリングを開始する前にコレクションをリセットすることをお勧めします。

var dataCollectionList = new dataCollection();
dataCollectionList.reset(jsonData);
var App = new AppView({model : dataCollectionList});

ビューの「render」メソッドで、コレクションから「totalCount」プロパティを取得できます -

render : function() {
    //Should spit the total count into the element, just as an example
    this.$el.append(this.model.totalCount); 
    //or console.log it
    console.log(this.model.totalCount);
    return this;   
}

出来上がり。補足 - Backbone を頻繁に使用する人として、人々が「モデル」のような属性 (つまり、peopleModel、itemModel など) を設定し、それが最終的にバックボーン コレクションになると、気が狂いそうになります。それが何であるかにちなんで名付けた方がはるかに明確ですが、一部のMVC純粋主義者は少し同意しないかもしれません.

また、このコード ブロックでは:

_.each(this.model.models, function (myData) {
            $(this.el).append(new ItemView({model:myData}).render().el);
        }, this);

する必要はありません_.each(this.model.models.......)。コレクションを操作しているため、コレクションには「each」メソッドが組み込まれています。

this.model.each(function (myData) { ..... } , this);

かなりきれい。

于 2012-10-14T05:32:50.587 に答える