2014-04-28 4 views
0

백본과 핸들이있는 페이지에서 두 모델을 렌더링 중입니다. 두 모델을 함께 연결하려고하는데 concat() 함수는 error:Undefined is not a function을 반환합니다.정의되지 않음은 concat이있는 함수가 아닙니다.

이 내 렌더링 기능입니다 : 분명히 전송을 위해, JSON의 문자열 표현을 반환 this.collection.models[0].toJSON() 원래의 게시물에 몇 가지 의견에서

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

트위터에있는 데이터가 있습니까? – Pete

+0

네, 그렇습니다 .... –

+0

줄이 뭐니? 문제가있을 경우 ** line number와 함께 ** 오류를 게시하고 관련 라인을 표시하십시오! 'console.log (typeof (twitter), twitter);를 시도해보십시오. –

답변

1

.

실행 가능한 상태로 만들려면 실제 JavaScript 객체로 변환해야합니다.

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

개체를 반환하면 jQuery.extend()을 사용하여 개체를 연결할 수 있습니다.

배열을 반환하는 경우 확장 메서드 .concat()을 사용할 수 있습니다.

this.collection.models[0] 그냥 객체의 경우, 그들에 jQuery.extend()를 사용 .toJSON()와 필요 엘리엇은 지적하지 않기 때문에, 그러나, 그것은 개체의 toJSON가 갈 수있는 방법이 될 수 있습니다에서 관찰 가능한을 가지고 knockoutjs 이런 건 인 경우, 순수한 물건을 얻는 것.

var finalObj = {}; 
var twitter = this.collection.models[0]; 
var instagram = this.collection.models[1]; 
$.extend(finalObj, twitter, instagram); 
+0

백본 모델의 ['toJSON'] (http://backbonejs.org/#Model-toJSON)은 String이 아니라 Object를 반환합니다. 이것은 [JSON.stringify가 예상하는] 동작입니다 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON_behavior). 방법. 'models [0]'은 백본 모델 인스턴스 여야하며,'$ .extend'는 그런 일에 유용하지 않습니다. –

관련 문제