0

リモート REST サーバーを呼び出し、配列を含むフィールドを含む JSON オブジェクトを取得するコレクションがあります。私のモデルは、コレクションの反復ごとに呼び出され、テンプレートでレンダリングするフィールドの 1 つを取得できます。ここで、物事が奇妙になります...

テンプレートで次のことを行う場合:

<%= name %>

出力する名前フィールドを取得できます。ただし、モデルの最初にいくつかのデフォルトを作成しない限り、他のフィールドはレンダリングされません。

defaults: {
    name: '',
    phone: '',
    age: ''
}

したがって、これを含めると、それらのフィールドをレンダリングできます。モデルのフィールドを使用するには、モデルでそれを行う必要がありますか?

... n8eil のリクエストに応じて

テンプレート:

<script type="text/template" id="pos-list-item">
    <%= name %>, <%= description %>, <%= cost %>
</script>

JSON オブジェクト:

{
    "itemCount": 3,
    "items": [
        {
            "uri": "/item/1234",
            "name": "Soda Drink",
            "description": "A fizzy drink",
            "price": [
            {
                "costType": "A",
                "cost": 3.5
            }
        ],
        "live": true,
        "created": "2013-10-07 18:22:29"
    },
    {
        "uri": "/item/12345",
        "name": "Choco bar",
        "description": "A nice snack",
        "price": [
            {
                "costType": "B"
                "cost": 1.75
            }
        ],
        "live": true,
        "created": "2013-10-07 18:22:29"
    }
    ]
}

プロジェクトのプライバシーのために一部のデータを変更しましたが、これは基本的に JSON オブジェクトのレイアウトです。上記のようにテンプレートに表示するには、「名前」、「説明」、および「コスト」が必要です。「価格」をコンソールにログアウトすると、オブジェクトとして表示されますが、「コスト」フィールドを選択することはできません...

4

2 に答える 2

0

http://jsbin.com/eHoPAri/1/edit?html,js,console,output

私は先に進み、このデータのマリオネット構造をいくつかモックアップしましたが、それらがあなたがやっていることに近いかどうかはわかりません. テンプレートで変更する必要があったのは、'cost' が 'price' 配列内のオブジェクト内にあるため、' ' で参照する必要があることだけですprice[0].cost。それ以外の場合は、テンプレートでレンダリングするためにモデルのデフォルト プロパティは必要ありませんが、モデルで見つからないプロパティを参照しようとするとエラーが発生します。

配列から参照する必要がないように、ロード時に「コスト」プロパティをモデルに追加するメソッドを追加することもできます。

    var itemModel = Backbone.Model.extend({
      parse : function(response, options){
         return _.extend(response, { 'cost' : response['price'][0]['cost'] })
      }
    });

お役に立てれば

于 2013-10-16T03:07:46.813 に答える