2014-06-16 2 views
4

두 개의 템플릿이 있다고 가정 해 봅니다. 내 콘텐츠가 포함 된 index 템플릿과 변경 내역이 포함 된 changelog 템플릿입니다. 다른 템플릿으로 간주됩니다.Ractive에서 여러 템플릿을 처리하는 방법

<script id='index' type='text/ractive'> 
// ... 
</script> 

<script id='changelog' type='text/ractive'> 
// ... 
</script> 

ractive = new Ractive({...}); 

이러한 템플릿을 프로그래밍 방식으로 변경하는 가장 좋은 방법은 무엇입니까? Ractive 인스턴스의 template 변수 (예 : ractive.template = '#changelog';)를 변경할 수는 있지만 변경하면 output 콘텐츠가 업데이트되지 않습니다. 이상적으로는 사용자가 메뉴의 버튼을 클릭하여 indexchangelog 사이를 전환 할 수 있도록하고 싶습니다.

답변

7

템플릿을 동적으로 변경하는 것은 향후 릴리스에서 볼 수있는 내용입니다. 일부 배경에 대해서는 this GitHub thread을 참조하십시오. 현재

, 문제는이 같은 것입니다 달성하기 위해 가장 좋은 방법 : 인덱스 템플릿을 숨기고 변경 로그를 표시,

<script id='main' type='text/ractive'> 
    {{# page === 'index' }} 
    {{>index}} 
    {{/}} 

    {{# page === 'changelog' }} 
    {{>changelog}} 
    {{/}} 
</script> 

<script id='index' type='text/ractive>...</script> 
<script id='changelog' type='text/ractive>...</script> 

그런 다음 앱 내부 ractive.set('page', 'changelog')합니다. 당신이 <script> 태그의 부하를하지 않고이 작업을 수행하고자한다면

,이 같은 옵션을 설정할 것 :

ractive = new Ractive({ 
    /* other options... */ 
    template: mainTemplate, 
    partials: { 
    index: indexTemplate, 
    changelog: changelogTemplate 
    } 
}); 
+0

아, 감사합니다. 그것이 내가 생각하고 있었지만 확실하지 않았습니다. 나는 오늘 일찍 그와 같은 것을 시도했지만 템플리트 내에서 특정 변수를 재설정하는 것으로 보였습니다. 템플릿에서 일부 섹션이 사라지거나 내용을 새로 고칠 때까지 제대로 작동하지 않습니다. 이 방법에 알려진 버그가 있습니까? – josh

+0

그건 아주 이상하게 들리 네요. 버그 같아요.이 바이올린을 포크로 재현 할 수 있겠습니까? http://jsfiddle.net/rich_harris/va6jU/ 감사합니다 –

+0

사실, 일부 테스트 중에 좀 더 자세히 살펴본 후에 템플릿에 버그가없는 것으로 나타났습니다. DOM에 있어야 할 필드가 표시되지만 버그가있을 수 있습니다. 템플릿 시스템이 인라인 스타일에 영향을 미치는 방식. 페이지를 앞뒤로 바꿨을 때 렌더링 문제를 일으키는 요소에서 인라인 스타일이 사라졌습니다. – josh

3

내가 체크 대답에 동의하는 경우 확실하지 않다. 템플릿을 변경하는 방법은 훨씬 간단합니다. 템플릿의 id를 알면됩니다. ractive에는 'resetTemplate'이라는 깔끔한 함수가 있습니다.이 함수를 사용하면 주어진 객체의 템플릿을 변경할 수 있습니다. 예를 들면 :

var rxObject = new Ractive({ 
 
    el: '#element', 
 
    template: '#template_1' 
 
}); 
 

 
//what you can do at any point in your code is call ractive.resetTemplate, as such: 
 

 
rxObject.resetTemplate('#template_2');
<script id="template_1" type="text/html"> 
 
    
 
    //content of this script 
 
    
 
</script> 
 

 
<script id="template_2" type="text/html"> 
 
    
 
    //content of this script 
 
    
 
</script>

나는 그에게 '확인'대답은 설명하는 방법을하는 작업을 더 복잡하고 더 생각합니다.

+0

나는 이것을 더 깨끗한 해결책으로 upvote해야만했다. – LeslieOA

관련 문제