Undefined не является функцией с concat

0

Я рисую две модели на странице с основой и рулями. Я пытаюсь объединить две модели вместе, но функция concat() возвращает error:Undefined is not a function.

Это моя функция рендеринга:

render: function (eventName) {
     var twitter=this.collection.models[0].toJSON();
     var instagram=this.collection.models[1].toJSON();
     var conc=twitter.concat(instagram);  <--LINE ERROR      
     $(this.el).html(this.template(conc));
     return this;
},
  • 0
    в твиттере есть данные?
  • 0
    Да....
Показать ещё 11 комментариев
Теги:
backbone.js

1 ответ

1
Лучший ответ

Из некоторых комментариев к исходному сообщению this.collection.models[0].toJSON() возвращает строковое представление JSON, очевидно, для передачи.

Чтобы получить это в работоспособном состоянии, они должны быть преобразованы в фактический объект JavaScript.

JSON.parse(this.collection.models[0].toJSON())

Если это возвращает объект, вы можете использовать jQuery.extend() для конкатенации объектов.

Если он возвращает массив, вы можете использовать метод расширения .concat().

Если this.collection.models[0] - просто объект, то используйте jQuery.extend() на них, не нужно с .toJSON() как указывает Эллиот, если это что-то вроде knockoutjs где объект имеет наблюдаемые в, toJSON может быть путем, чтобы получить чистый объект.

var finalObj = {};
var twitter = this.collection.models[0];
var instagram = this.collection.models[1];
$.extend(finalObj, twitter, instagram);
  • 0
    toJSON модели toJSON возвращает объект, а не строку. Это поведение, JSON.stringify ожидает JSON.stringify , отсюда и плохое имя метода. models[0] должен быть экземпляром модели Backbone, $.extend ничего подобного не сделает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню