나는 예제를 기반으로 템플릿을 동적으로 설정하기 위해 ractivejs를 사용하려고 시도하고 있습니다 (http://docs.ractivejs.org/latest/advanced-configuration). 내가 겪고있는 문제는 템플릿을 한 번 (this.reset을 사용하여) 변경하면 처음에는 잘 작동하지만 두 번째에는 제대로 작동하지 않는다는 것입니다. 즉, 관찰자가 호출되지 않고 구성 요소가 주 랩톱 객체에서 '분리'된 것처럼 보입니다. 예를 들어 부모 Ractive 객체에 정의 된 요소에 대한 데이터 참조는 값을 표시하지 않고 빈 문자열 만 표시합니다. (인 'INIT A'를동적으로 템플릿을 업데이트하는
작은 테스트 케이스 http://jsfiddle.net/bbaetz/41n2yvft/4/에서 사용할 수 있지만, 메인 스크립트이다
가<foo></foo>
<script id='widget1-template' type='text/ractive'>
<button on-click='set("widgetParams.val","12345")'>set val to 12345</button>
<button on-click='set("widgetParams.val","54321")'>set val to 54321</button>
Val is: {{widgetParams.val}}
<br />
</script>
<script id='template' type='text/ractive'>
<widget1></widget1>
<widget2></widget2>
</script>
번째 위젯 출력 시작은 다음 템플릿
var Widget1 = Ractive.extend({
template : '#widget1-template'
});
var Widget2 = Ractive.extend({
template: function(data) {
return data.template
},
init : function() {
this.observe('widgetParams.val', function (newVal, oldVal) {
if (newVal === oldVal) { return; }
var newData = {
template : 'Reset: {{val}} and {{widgetParams.val}}',
val : newVal + ' data',
};
this.reset(newData);
}.bind(this), {init: false});
},
data : {
template : 'A: {{val}}',
val : 'INIT',
}
});
var ractive = new Ractive({
el : 'foo',
template : '#template',
components : {
widget1 : Widget1,
widget2 : Widget2
},
data : {
widgetParams : {
val : '12345678',
},
},
});
옳은). 버튼 중 하나를 클릭하면 '재설정 : 12345 데이터 및 12345'(물론 오른쪽)로 변경되지만 다른 버튼을 클릭하면 '재설정 : 54321 데이터'가 표시됩니다. 다른 'widgetParams.val'속성. 그 후 관측자는 결코 해고 당하지 않는다. 아마도 속성을 관찰하면 그 속성에 접근하지 못했기 때문일 것이다.
이것은 혹독한 버그인가?
(이 경우는 사용자가 계정 목록에서 선택할 수있는 하나의 구성 요소이며 데이터를 얻기 위해 ajax 호출을 수행하는 두 번째 구성 요소와 '계정 유형'을 기반으로하는 템플릿입니다 두 번째 '위젯'은 다른 컨텍스트에서 재사용됩니다.이 모든 것이 자체적으로/부분적으로 사용되는 하나의 템플릿이 아닌 이유입니다.
나는 실제로 두 가지를하려고합니다. 데이터와 템플릿 (Ajax 호출에서 올 것임)을 대체하려고합니다. 'ractivejs edge'를 선택하면이 문제가 해결 된 것 같습니다. – Bradley
두 번째 예에서는 원자와 템플릿을 업데이트하는 방법이 있습니까? 이전 템플릿이 새 데이터 모델을 지원하지 않을 수 있습니다. – Bradley