Я рисую две модели на странице с основой и рулями. Я пытаюсь объединить две модели вместе, но функция 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;
},
Из некоторых комментариев к исходному сообщению 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);
toJSON
модели toJSON
возвращает объект, а не строку. Это поведение, JSON.stringify
ожидает JSON.stringify
, отсюда и плохое имя метода. models[0]
должен быть экземпляром модели Backbone, $.extend
ничего подобного не сделает.