afterRender 이벤트에서 AJAX 호출로 트리거 된 녹아웃 템플릿에 의해 만들어진 요소에 바인딩하는 데 문제가 있습니다. 이 Fiddle에서 볼 수 있듯이 결과는 제대로 렌더링되지만 afterRender 이벤트 핸들러에서는 요소를 사용할 수 없습니다.AJax 호출 후 녹아웃 템플릿 바인딩 요소를 사용할 수 없습니다.
질문 ...
- 어떻게 템플릿 심지어는 afterRender 이벤트 핸들러가 실행될 때 렌더링 된 것으로 나타나지 않기 때문에 제대로 렌더링입니까?
왜 AJAX 호출이 결과에 영향을 줍니까? AJAX 호출 위의 행의 주석 처리를 제거하면 afterRender 이벤트에서 템플릿 요소를 사용할 수 있습니다. 여기
HTML입니다
<div id="plugin" data-bind="template: { name: 'fooTemplate', data: $data, afterRender: postProcess }"></div>
<br />
<br />
<hr />
<div id="results"></div>
<script type="text/html" id="fooTemplate">
<div data-bind="foreach: items()">
<span data-bind="text: displayText"></span>
</div>
</script>
JAVASCRIPT
var data = {
items: [{
displayText: 'Name',
}, {
displayText: 'Last Login Date',
}, {
displayText: 'Email',
}]
};
function DataModel() {
var self = this;
self.items = ko.observableArray([]);
self.data = ko.dependentObservable(function() {
//self.items(data.items);// <<== UNCOMMENT THIS LINE AND THE postProcess FUNCTION SHOWS FULLY RENDERED DOM
$.ajax({
url: '/some/path',
error: function() {
self.items(data.items);
}
});
});
postProcess = function() {
$('#results').text($('#plugin').html());
}
}
dataModel = new DataModel();
ko.applyBindings(dataModel);
한 노트 ... 바이올린은에 AJAX 호출을 가짜 주소. 이것은 바이올린이 서버 종속성을 갖지 않기 때문입니다. error 속성은 템플릿을 실행하게하는 데이터를 변경하는 데 활용됩니다. 그러나, 내 개발 환경에서 유효한 URL을 호출하면 바이올린에 표시된 것과 동일한 결과가 산출됩니다. 또한 서버에서 반환 된 데이터를 사용하여 템플릿을로드하지 않습니다. 오히려 바이올린은 맨 위에 정적으로 정의 된 데이터 소스를 사용합니다 (다시 한 번 문제를 데모하기 위해).
설명해 주셔서 감사합니다. 바이올린은 AJAX가 서버에서 데이터를 가져와야하는 전반적인 솔루션의 예입니다. 바이올린은 AJAX 사용을 지원하고 비동기 문제를 해결하기 위해 어떻게 변경 될까요? –
큰 앱에서 스 니펫 일 때 그 힘든 부분을 알고 있습니다. 한 가지 방법에 대한 개념은 다음과 같습니다. http://jsfiddle.net/jeljeljel/nSPsM/ –
감사합니다. 원래 게시물에서 공유 한 것과 동일한 피들이라고 생각합니다. 다른 URL을 사용하셨습니까? –