2013-03-14 3 views
2

jQuery 모바일을 사용하여 phonegap 프로젝트를 작성하고 있습니다.메소드에 전달 된 자바 스크립트 객체가 문자열입니다.

내가 반복하는 자바 스크립트 개체가 있습니다.

현재 문제는 다음과 같습니다.

다음은 내 모델 개체의 한 메서드입니다. 그것은 스스로 재귀 적이며 한번 호출되면 사용자가 이전 레벨의 객체에 의해 생성 된 목록 항목을 클릭 할 때마다 다음 단계로 반복됩니다.

내가 처리하려고하는 것은 iterated 세그먼트 b를 메서드 자체에 객체로 전달하는 것입니다. 어떤 이유로이 값은 객체 자체가 아니라 [Object]라는 문자열로 반환됩니다.

이 함수는 첫 번째 레벨을 표시 할 때 작동하지만 각 자식에 대해 생성하는 "firstString"문자열에 대한 내용이 내 객체를 object라는 문자열로 변환하는 것으로 보입니다. 따옴표를 제거하고 객체를 중괄호에 배치하여 아무 소용이 없습니다.

사람이, 나는 분명히 그 호출 문자열로 생성되는 방법에 물체를 통과 관한 중요한 뭔가를 누락 일어나고있는 이유는 어떤 생각을 가지고 ...시겠습니까

내 코드는 아래에, 그리고 라인은 문제의 원인 이 (가) firstString+="model.recurseAppTree('"+b+"');";

recurseAppTree: function(AppTree) 
{ 
    $.each(AppTree, function(a,b) 
    { 
     var firstString='<li data-role="list-divider" role="heading" data-theme="b">'+b.DisplayValue+'</li>'; 

     if(b.Children != null) 
     { 
      $.each(b.Children, function(c,d) 
      { 
       firstString+="<li data-theme='c'><a data-transition='slide' id='id-"+d.IdValue+"' href='javascript:void(0);'>"+d.DisplayValue+"</a></li>"; 
       firstString+="<script>"; 
       firstString+="$('#id-"+d.IdValue+"').click(function(){"; 
       firstString+="model.recurseAppTree('"+b+"');"; 
       firstString+="});"; 
       firstString+="</script>"; 
      }); 
     } 

     $("#selectview").html(firstString); 
     $("#selectview").listview('refresh', true); 

    }); 
}, 

답변

0

1은 예를 들어, 당신의 ''태그에 (공통) 클래스를 추가 unrollLink :

var firstString='<li ...><a class="unrollLink" ...></a></li>" 

2

는 모든 "나무"노드의 부모 인 당신의 HTML에서 노드를 선택하고 항상 HTML에 존재합니다. 클릭 핸들러를이 노드에 위임하십시오.

$('#selectview').on('click', '.unrollLink', function(){ 
    //this === clicked link - write a function which returns the node you want based on the "id" you set 
    var myNode = getNode(this.id); 
    model.recurseAppTree(myNode); 
}); 

3 적절한 html을 생성하도록 함수를 변경하십시오. 이벤트에 대한 코드를 추가 할 필요가 없습니다.

recurseAppTree: function(AppTree) 
{ 
    $.each(AppTree, function(a,b) 
    { 
     var firstString='<li data-role="list-divider" role="heading" data-theme="b">'+b.DisplayValue+'</li>'; 

     if(b.Children != null) 
     { 
      $.each(b.Children, function(c,d) 
      { 
       // add the class you chose to the clickable items : 
       firstString+='<li data-theme="c"><a class="unrollLink" data-transition="slide" id="id-'+d.IdValue+'" href="javascript:void(0);">'+d.DisplayValue+'</a></li>'; 
      }); 
     } 

     $("#selectview").html(firstString); 
     $("#selectview").listview('refresh', true); 

    }); 
}, 
2

정상입니다.

+과 연결하여 문자열 컨텍스트에서 개체를 사용합니다. JS가 암시 적으로 객체를 문자열로 변환하도록 지시합니다.

b = {} 
alert(typeof b) // object 
alert(typeof (''+b)) // string 
당신은 당신의 GUI의 이벤트 위임을 사용한다
관련 문제