Как создать *статическое* свойство в can.Model

Мне нужно как-то хранить метаданные в can.Model. Я использую метод findAll и получаю такой JSON:

{
    "metadata": {
        "color": "red"
    },
    "data": [
        { "id": 1, "description": "Do the dishes." },
        { "id": 2, "description": "Mow the lawn." },
        { "id": 3, "description": "Finish the laundry." }
    ]
}

Я могу работать с данными, такими как can.Model.List, но мне нужны метаданные, например статическое свойство или что-то в этом роде.


person Pavel Bezdverniy    schedule 25.03.2015    source источник
comment
Вы хотите добавить статическое свойство в can.Model.List или хотите, чтобы все экземпляры вашей модели имели свойство цвета, установленное на красный?   -  person Alfredo Delgado    schedule 30.03.2015


Ответы (1)


Вы можете использовать can.Model.parseModels, чтобы скорректировать свой ответ JSON, прежде чем он превратится в может.Модель.Список.

parseModels: function(response, xhr) {
  var data = response.data;
  var metadata = response.metadata;
  var properties;

  if(data && data.length && metadata) {
    properties = Object.getOwnPropertyNames(metadata);

    can.each(data, function(datum) {
      can.each(properties, function(property) {
        datum[property] = metadata[property];
      });
    });
  }

  return response;
}

Вот пример работы в JS Bin: http://jsbin.com/qoxuju/1/edit?js,console

person Alfredo Delgado    schedule 30.03.2015