2013-05-20 5 views
3

"X"라는 네임 스페이스가 있으며 서버에서 일부 파일을 가져 오는 getJSON 함수가 있습니다. 이 네임 스페이스를 다양한 내용으로 재사용하고 싶습니다.jQuery - JS 변수가있는 HTML을 매개 변수로 전달합니다.

var uid = "27D76901-B6B1-B332-918B-D9F5A7152EFC"; 
var X = { 
    el: "", 
    elMarkup: "", 
    url: "", 
    initialize: function(el, elMarkup, url){ 
     $.getJSON(url, function(data){ 
      el.find("p").remove().end(); 
      $.each(data.comments, function(key, value){ 
       el.append(elMarkup); 
      }) 
     }) 
    } 
}; 

X.el = $("#comments"); 
X.elMarkup = "<p>"+ value.content +" by "+ value.user +"</p>"; 
X.url = "http://example.com/getComments?uid=" + uid; 
X.initialize(X.el, X.elMarkup, X.url); 

나는 $.each 루프에 대한 elMarkup 변수에 문제가 오전 : 여기에 코드입니다. 이 변수를 어떻게 동적으로 정의 할 수 있습니까? 감사!

+0

'X.elMarkup = "

"+ value.user + "

"; "두 변수가 함수 밖에서 정의되지 않았기 때문에'undefined'를 제공합니다. – hjpotter92

+0

@nnnnnn 루프 내에서 값 변수를 정의하려는 경우 네임 스페이스를 다시 사용할 수 없습니다. 다른 json 결과에는 동일한 배열이 포함되지 않습니다. 가변 값 변수를 받아들이려면 루프가 필요합니다. –

+0

예, 댓글을 게시 한 직후에 깨달았습니다. 죄송합니다. – nnnnnn

답변

1

이 시도해 볼 수도 있습니다 : 다음

X.elMarkup = function(value) { 
    return "<p>"+ value.content +" by "+ value.user +"</p>"; 
}; 

그리고 당신의 $.getJSON() 콜백 :

대신 문자열로 X.elMarkup을 정의한다
 $.each(data.comments, function(key, value){ 
      el.append(elMarkup(value)); 
     }); 

이의를 생성하는 콜백 함수로 정의 당신이 필요로하는 특정한 html 구조. 그런 다음 일반 initialize() 함수는 elMarkup()을 호출하고 서식을 지정해야하는 현재 값을 전달하면됩니다.

X.initialize() 함수의 인수로 해당 속성을 전달하려는 경우 속성을 X.el = ...으로 설정하는 것은 실제로 의미가 없습니다. 필요한 값을 직접 전달하고 필요할 경우 X.initialize() 값을 특성으로 저장하는 것이 더 적합합니다. 또는 속성을 설정하고 X.initialize()을 인수없이 호출하십시오.

+0

작동 솔루션을 제공해 주셔서 감사합니다. –

1
은 다음과 변경

:

$.each(data.comments, function(key, value){ 
    el.append(elMarkup); 
}) 

$.each(data.comments, function(key, value){ 
    el.append($('<p />', {"html": value.content + " by " + value.user})); 
}) 

에 있기 때문에 내가 코멘트에서 언급 한 이유.

관련 문제