2013-05-01 4 views
2

조동사가 내가 생각했던 것보다 더 어려운 것으로 밝혀 의존하고 닫습니다하지 않음 :/Durandal 모달

모달 로딩 최대 뷰/뷰가 제대로 모달 (가) 버튼을 눌러 정보를 저장 저장을 클릭있어 (난을받을 수 있나요 '비워야합니다 : Q.js에서 []'하지만 분명히 이것은 문제가되지 않습니까?) 문제는 제가 약속과 관련이 있을지 모르지만 찾을 수없는 경우입니다.

부모의 뷰 모델 -

var createNew = function() { 
    app.showModal(tfcreate).then(function (modalResult) { 
     if (!modalResult) { return false; } 

     var templateId = modalResult; 
     router.replaceLocation('#/templateformedit/' + templateId); 
    }); 
}; 

모달의 뷰 모델 -

var cancel = function() { 
    this.modal.close(false); 
}; 

var save = function() { 
    isSaving(true); 
    setRevisionInfo(); 

    datacontext.saveChanges() 
     .then(alertMe) 
     .fail(initFailed) 
     .fin(complete); 

    function setRevisionInfo() { 
     templateForm().revisionLevel(1); 
     templateForm().createdById(shell.currentUser().id()); 
     templateForm().lastRevisedId(shell.currentUser().id()); 
     var nowDT = moment().format('LL'); 
     templateForm().lastRevisedDT(nowDT); 
     templateForm().createdDT(nowDT);    
    } 

    function alertMe() { 
     return console.log('done'); // <<< This is firing ok 
    } 

    function complete() { 
     isSaving(false); 
     this.modal.close(templateForm().id()); // <<< Breakpoint reaches here just fine 
    } 
}; 

나는 그것이 잘 닫습니다) (취소 다시 바인딩 취소 버튼을 누르면 경우 저장 버튼을 클릭하여 save()를 클릭하고 객체를 올바르게 저장하고 모든 중단 점에 도달하지만 절대로 닫지 않습니다. 저장 한 후에 취소를 누르면 다시 닫힙니다. complete() 함수를 호출하는 동안 cancel()을 호출 해 보았습니다. 문에 도달했지만 다시 닫히지 않습니다. 어떤 아이디어 ???

참고 : 모달에서 router.replaceLocation을 호출 할 수 있으며보기가 잘 변경되지만 모달은 다음보기로 유지됩니다.

편집 : isSaving이 끝나고 hasChanges가 false가 될 때까지 사용할 수있는 '닫기'단추를 추가 했으므로이 단추를 닫으면 모든 것이 정상적으로 닫히지 만 꼭 필요한 것은 아닙니다. 요청에 따라

+0

'complete()'의'this'가 여전히 당신의 VM 컨텍스트라고 확신합니까? save()와 complete()'self.modal.close (...) '의 상단에서'var self = this;'를 시도하십시오. – RainerAtSpirit

+0

그럴 것입니다. 이 답변을 할 수 있다면 감사의 말씀을 전합니다. –

답변

4

:

당신은 complete()에서 this 여전히 VM 컨텍스트인지 확인이 있습니까? self.modal.close(...)

+0

이것은 해결책이었습니다. 변수 내에서 함수 내부에서 이것을 호출하려고 시도했지만 문제없이 실행해도 모달을 종료하지는 않았습니다. –