2015-02-06 1 views
0

클라이언트에 JSON을 보내는 AJAX가 있으므로 클라이언트 측에서 Mustache 템플릿을 렌더링 할 수 있습니다. 콧수염 틀은 부분적인 것입니다. 모든 것이 잘됩니다. 내가 hereruby ​​Mustache.render에는 JS Mustache.render와 같은 부분에 대한 세 번째 매개 변수가 없습니다.

샘플 (11)의 예를 빌릴 수 있습니다 : 파셜 (콧수염의 JS 버전)

var data = { depts: [ 
    { name: "Engineering", 
     employees: [ 
      {firstName: "Christophe", lastName: "Coenraets"}, 
      {firstName: "John", lastName: "Smith"}] 
    }, 
    { name: "Sales", 
     employees: [ 
      {firstName: "Paula", lastName: "Taylor"}, 
      {firstName: "Lisa", lastName: "Jones"}] 
    }] 
}; 

var tpl = "{{#depts}}<h1>{{name}}</h1>" + 
      "<ul>{{#employees}}{{>employee}}{{/employees}}</ul>{{/depts}}"; 
var partials = {employee: "<li>{{firstName}} {{lastName}}</li>"}; 
var html = Mustache.render(tpl, data, partials); 
$('#sampleArea').html(html); 

당신이 Mustache.render에 대한 호출에서 볼 수 있듯이, 당신은 파셜을 전달할 수있는 제 3의 인수가, JS에서 잘 작동합니다.

Ruby에서 정확히 동일한 작업을 수행해야하지만 문제점은 Ruby Mustache의 입니다. 세 번째 인수는 존재하지 않습니다.. 나는 Mustache 소스를 보았고 그것을 디버깅했습니다. Mustache의 "컨텍스트"와 관련이 있습니다. 그러나 JS 버전의 Mustache와 같은 PARTIAL을 전달하는 방법을 알지 못했습니다.

나는 시도했다 :

Mustache.render(mytemplate, { data: myjson, partial: mypartial }) 

를하지만 루비 구현에서는 myjson에게

답변

1

을 렌더링하지 않습니다, 파셜은 Mustache.partial에 의해 파일 시스템에서로드 된 파일에 대한, 이는 기본적으로 체크 현재 디렉토리에 mypartial.mustache으로 명명되었습니다. 당신은 당신의 자신의 특정 요구에 콧수염을 서브 클래스 기본 동작을 재정의 할 수 있습니다 :

class MyMustache < Mustache 
    PARTIALS = { 
    employee: "<li>{{firstName}} {{lastName}}</li>" 
    } 

    def partial(name) 
    PARTIALS[name.to_sym] 
    end 
end 

puts MyMustache.render(tpl, data) 

루비 구현은 현저하게 잘하지만 대부분 소스 주석, 설명되어 있습니다. 더 많은 정보를 위해 체크 아웃 :

https://github.com/mustache/mustache/blob/master/lib/mustache.rb#L6-L73

+0

그것은 확실히 대신 코드 내부에, GitHub의 README에 있어야합니다. 이것을 주석하고, +1 할 것입니다. 내 질문 예제를 기반으로 코드를 보여 주면 답변을 수락합니다. –

관련 문제