Backbone.js + Отдых.Коллекция не заполняется после fetch () - PullRequest
37 голосов
/ 31 августа 2011

Я новичок в Backbone.Поэтому я пытаюсь получить данные из службы REST.

это мой простой код:

$(function () {

    var Entity = Backbone.Model.extend({
        url: function() {
            return 'http://localhost:8080/rest/entity/'+this.id;
        }
    });

    var EntityList = Backbone.Collection.extend({       
        model: Entity,
        url: 'http://localhost:8080/rest/entity'
    });

    var entityList = new EntityList();

    entityList.fetch();

});

моя служба отдыха возвращает следующий JSON:

[{"id":1387,
  "version":3,
  "entityName":"entity01",
  "entityLabel":"Entity01",
  "entityPluralLabel":"Entity01",
  "attributes":
     [{"id":1425,
       "slot":"D001",
       "version":0,
       "attributeName":"dfield",
       "attributeType":
          {"id":7,
           "description":"Date",
           "attributeType":"date",
           "databaseType":"DATE"
          },
       "options":[],
       "order":2,
       "attributeLabel":"dField",
       "checked":null
      },
      {"id":1424,
       "slot":"S001",
       "version":0,
       "attributeName":"txfield",
       "attributeType":
          {"id":1,
           "description":"Textbox",
           "attributeType":"textbox",
           "databaseType":"STRING"
          },
       "options":[],
       "order":1,
       "attributeLabel":"txField",
       "checked":null
      }
     ]  
 },
 {"id":1426,
  "version":3,
  "entityName":"entity02",
  "entityLabel":"Entity02",
  "entityPluralLabel":"Entity02",
  "attributes":
     [{"id":1464,
       "slot":"D001",
       "version":0,
       "attributeName":"dfield",
       "attributeType":
          {"id":7,
           "description":"Date",
           "attributeType":"date",
           "databaseType":"DATE"
          },
       "options":[],
       "order":2,
       "attributeLabel":"dField",
       "checked":null
      }
     ]
 }
]

Вотладчик Я вижу, что запрос был отправлен в службу REST, и ответ был получен, как я могу узнать, заполнена ли коллекция entityList полученными данными или нет?В отладчике entityList.models пусто после entityList.fetch ();

Я на правильном пути или что-то не так с моим кодом?

1 Ответ

83 голосов
/ 01 сентября 2011

Я думаю, вы на правильном пути.Но поскольку Backbone.Collection.fetch() является асинхронным, вы должны проверить значение entityList.models не сразу после вызова метода, а в success обратном вызове fetch.

То есть этот код скажет, что список моделей пуст:

entityList.fetch();
console.log(entityList.models); // => 0 (collection being fetched)

, тогда как этот код будет печатать количество моделей в коллекции, когда она будет заполнена:

entityList.fetch({success: function(){
    console.log(entityList.models); // => 2 (collection have been populated)
}});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...