2012-09-24 1 views
1

데이터 객체 배열에 따라 다른 핸들 템플릿에 JSON 데이터를 전송하지만이 JSON 구조를 가지고 :이 작업을 수행 할 수 있는지 확실하지 않습니다

var data = {"obj": [ 
       {"user": "Fred", "age": "23", "type": "personal"}, 
       {"user": "Ralph", "age": "32", "type": "business"}, 
       {"user": "John", "age": "44", "type": "other"} 
      ] 
      }; 

내가 내 HTML 페이지 곳에서 3 개 대상 영역이를 나는 사용자를 표시하고 "유형"을 기준으로 연령을 표시하려고합니다. 나는이 렌더링 내 아약스에서 이것을 가지고 핸들을 사용하고 있습니다 :

var source, 
template = Handlebars.compile(source), 
data; 

$.each(data['obj'], function (i, o) { 
    if (o['type'] === "personal") { 
     source = $("#personal").html(); 
     $("#place1").html(template(data)); 
    } else if (o['type'] === "business") { 
     source = $("#business").html(); 
     $("#place2").html(template(data)); 
    } else if (o['type'] === "casual") { 
     source = $("#other").html(); 
     $("#place3").html(template(data)); 
    } 
}); 

나는 $ .each 함수가 지정된 지역에 각 개체의 배열을 보낼 것이다 그래야 그것을 가지고 기대했다,하지만 그들은 단지 끝 하나의 섹션에 배치를 보낸 다음, 다음에 배치하는 등의 작업을 수행합니다. 도와주세요!

답변

1

거의 다 왔어. 당신이 말할 수 있도록 컴파일 된 템플릿 기능은 귀하의 경우 template는 인수로서 객체를 취합니다

$('#place1').html(template(o)); 

을 한 후 템플릿이 데이터에 액세스 할 수 {{user}}{{age}}을 사용; 예를 들면 : 당신이 각 유형에 대한 실제 템플릿을 변경하려면

{{user}}'s age is {{age}} 

그럼 그냥 다시 Handlebars.compile 전화 : 당신이 원하는 경우

if(o.type === 'personal') { 
    template = Handlebars.compile($('#personal').html()); 
    $('#place1').html(template(o)); 
} 

당신은 개체에 컴파일 된 템플릿을 캐시 할 수있다.

+0

소스 변경 후에 템플릿을 다시 컴파일하면 안됩니까? – balafi

+0

@Elias : 내 업데이트 된 답변의 의미는 무엇입니까? –

+0

예. 고맙습니다. – balafi