2013-01-24 3 views
1

renderEditor.template 파일에 매개 변수를 보내야합니다 ("grails install-templates"설치 후). 누구든지 나를 도울 수 있습니까? 감사. renderEditor.template 사용할GRAILS : renderEditor.template에 매개 변수 보내기

+0

약간의 작업을 설명 할 수 있습니까? renderEditor.template는 HTML 양식을 렌더링 할 때 양식 필드를 번역하여 해당 파일의 개인 메소드를 호출하기 위해 사용됩니다. 어떻게 또는 무엇을하려고하면 매개 변수를 전달해야 할 것입니다. 그냥 목표를 이해하려고 ... –

+0

알지만, renderEditor (p, "myString")와 같이 _form.gsp "renderEditor (p)"에서 호출하여 매개 변수를 보내야합니다. 템플릿. 미안하다 영어 –

답변

2

바인딩 변수 DefaultGrailsTemplateGenerator

def binding = [pluginManager: pluginManager, 
        property: property, 
        domainClass: domainClass, 
        cp: cp, 
        domainInstance:getPropertyName(domainClass)] 

domainClass가 대응 ConstrainedProperty되는 상기 발판 템플릿의 renderEditor(p) 통화에 전달 된 GrailsDomainClassPropertycp을 인 GrailsDomainClass, property되는 고정된다. 그 중 하나에서 필요한 것을 추출 할 수 있습니다. 같은 문제로 구글을 통해 여기있어 다른 사람들을 위해

+0

좋아, 어떻게 렌더링을 렌더링하는 템플릿이 개체에 의해 알 수 있습니까? 나는 다른 방법으로 처리해야만하는 두 개의 다른 템플릿에서 두 가지 다른 상황을 가지고 있습니다. 죄송합니다 영어 –

+0

@PhillipParente 나는 당신이 불행하게도 그렇게 생각하지 않습니다. DefaultGrailsTemplateGenerator'를 수정하여 임의의 매개 변수를 'renderEditor.template'에 전달할 수는 없지만 그러한 코드 변경 없이는 어떤 방법으로도이를 달성 할 수는 없습니다. –

+0

가장 좋은 방법입니다. 감사 –

0

은 (내가 그랬던 것처럼)

이안 로버츠가 제안 유사한 방법으로 그렇게 관리했습니다,하지만 당신은 새로운 구현을 만들 필요가 없습니다 템플릿 생성기.

p = new HgfGrailsDomainClassProperty(p, prefix, domainClass) 
if (display) { %> 
<hgf:ifAllowedOnField action="show" field="${p.name}"> 
<hgf:ifReasonToShow reasonElement="${p.name}" bean="\${${propertyName}}"> 
<div class="fieldcontain \${hasErrors(bean: ${propertyName}, field: '${prefix}${p.name}', 'error')} ${required ? 'required' : ''} ${(cp?.metaConstraints?.hiddenField)?'hiddenProperty':''}"> 
    <label for="${prefix}${p.name}"> 
     <g:message code="${domainClass.propertyName}.${prefix}${p.name}.label" default="${p.naturalName}" /> 
     <% if (required) { %><span class="required-indicator">*</span><% } %> 
    </label> 
    ${renderEditor(p)} 
... 

구현 : 당신이 필요로 그냥 추가 데이터를 새 속성을 생성 않았다 _form.gsp의 내부 에 대한 프록시 구현을 만들 org.codehaus.groovy.grails.commons.GrailsDomainClassProperty

입니다 이 같은 것을 볼 수 있습니다

다음 renderEditor.template 내부

package sk.hoppo.hgf; 

import org.codehaus.groovy.grails.commons.GrailsDomainClass 
import org.codehaus.groovy.grails.commons.GrailsDomainClassProperty 

public class HgfGrailsDomainClassProperty implements GrailsDomainClassProperty { 

private final String domainSuffix = "Instance"; 
private GrailsDomainClassProperty property; 
String prefix; 
String domainInstance; 

public HgfGrailsDomainClassProperty(GrailsDomainClassProperty property, String prefix, GrailsDomainClass parentDomainClass) { 
    super(); 
    this.property = property; 
    this.prefix = prefix; 
    domainInstance = getPropertyName(parentDomainClass); 
} 

private String getPropertyName(GrailsDomainClass domainClass) { 
    return "${domainClass.propertyName}${domainSuffix}"; 
} 

@Override 
public int getFetchMode() { 
    return property.getFetchMode(); 
} 

@Override 
public String getName() { 
    return property.getName(); 
} 
... 

을 그냥 송신 데이터에 액세스3210

sb << '<hgf:securedField' 
sb << ' name="' << property.prefix << property.name << '"' 
sb << ' field="' << property.prefix << property.name << '"' 

BTW. 이걸로 내 사용자 정의 renderEditor로 작업 할 수 있도록 컴포지션 (임베드)을 만들었습니다.