html 템플릿과 뷰 모델 코드를 얻기 위해 AMD를 사용하는 구성 요소 설정이 있습니다. 모든 것이 잘 작동합니다. 구성 요소는 전달 된 매개 변수로 정상적으로 작동하고 정상적으로 작동 할 때로드됩니다. 문제는 viewModel에서 관찰 가능 값을 정의한 것입니다.이 값은 템플릿 뷰에 표시되지만 관찰 가능 값이 변경되면 뷰의 텍스트는 변경되지 않습니다. 아무도 여기서 무슨 일이 일어날 지 설명 할 수 있습니까? 내가 바인딩하려고하는 텍스트는 modalTitle입니다. 모달을로드 할 때 제목이 'TEMP'이지만 콘솔에 입력하고 'window.modalTitle()'을 입력하면 '보고서 일정 만들기'가 표시됩니다. 그것은 관측 가능의 첫 번째 가치를 얻고 그 후에 그것을 무시하는 것과 같습니다. 어쨌든 강제로 업데이트를 찾을 수 있습니까?녹아웃 구성 요소 뷰가 ViewModel 관찰 가능 변경시 업데이트되지 않음
뷰 모델 (schedules.component.js)
define(['knockout'], function (ko) {
console.log('schedules hit');
loadCss('schedules');
function SchedulesViewModel(params) {
this.scheduledItems = params.scheduledItems;
this.itemName = params.itemName;
this.modalTitle = ko.observable("TEMP");
window.modalTitle = this.modalTitle;
}
SchedulesViewModel.prototype.initiateAddScheduledItem = function() {
this.modalTitle("CREATE " + this.itemName + " SCHEDULE");
$('#schedulesModal').modal('show');
};
SchedulesViewModel.prototype.removeSelectedScheduledItem = function() {
this.chosenValue('dislike');
};
window.ReportsApp.SchedulesViewModel = SchedulesViewModel;
return SchedulesViewModel;
});
보기 템플릿
<div id="schedulesModal" class="modal fade lcmsModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<!--<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>-->
<img src="/Content/images/modalASLogo.png" style="float: right;" />
<h4 class="modal-title" data-bind="text: modalTitle()">Test Title</h4>
</div>
<div class="modal-body">
<p>One fine body ...</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">CANCEL</button>
<button type="button" class="btn btn-primary">SAVE</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- /Bootstrap Modal -->
와우, 아주 좋은 눈이 있습니다. 나는 관찰 할 수있는 것이 관찰 할 수없는 것에 의존하고 있다는 사실조차 알지 못했습니다. 비동기 구성 요소로 작업하는 것이 저를 버렸다고 생각합니다. 일반적으로 전체 뷰 모델을 IIFE로 선언합니다. IIFE는 더 나은 캡슐화를 허용하지만 비동기 모듈을 사용하면 명시 적으로 작동하도록 정규 함수를 반환해야합니다. 내가 나중에보아야 할 유일한 질문은 여기 보이는 ko.applyBindinds에 대한 두 번째 호출입니다. 이것은 단지 구성 요소이므로 구성 요소가 상속하는 일반 viewModel이 있습니다. 여러 개의 viewModel을 가질 수 있는지 여부를 모르겠습니다. – Disease
@Disease 업데이트를 확인하십시오. –
jsfiddle 및 중첩 된 viewModels 내 질문을 것 같아요 이해 : 원하는만큼 여러 번 applyBindings 호출 할 수 있습니까? 위의 코드는 비동기 적으로로드 된 구성 요소 용이며 우리는 이들 중 많은 구성 요소를 갖게됩니다. 이미 전역 변수 viewModel을 창 변수에 저장했지만, 두 번째 구성 요소가로드 될 때 모든 구성 요소 viewmodels가 바인딩되도록 첫 번째 구성 요소에서 viewModel을 가져 오는 방법은 무엇입니까? 이러한 구성 요소의 viewModel을 전역 컨텍스트에 바인딩 할 수 없습니다. window.schedulesViewModel = SchedulesViewModel이 작동하지 않습니다. 또한 전달 된 코를 저장하지 않습니다. – Disease