2013-03-28 4 views
3

최근에 SPA 용 Durandal 라이브러리를 사용하기 시작했습니다. 작성자에게 명성을 얻었습니다. 훌륭한 라이브러리입니다.Durandal 모달 대화 상자를 사용하여 위젯 표시

저는 위젯 개념을 좋아하지만, 비 상태 화면에 대해보기를 사용하는 대신보기에 첨부하지 않고 모달 대화 상자에 위젯을 표시 할 수 없었습니다. 누구든지이 작업을 수행하는 방법을 알고 있습니까? 정교한

는 JS에 위젯의 생성이 가능하지만 첨부하는 DOM 요소를 필요 widget.create 기능이있다. 내가 스왑에 매핑 "대화"보기를 만들 수 있습니다 알고, 대안으로

app.showModal(theWidget); 

: 내가 무엇을 선호하는 것은, 다음과 같이 부르는 DOM에 연결하지 않고도, 위젯을 만드는 것입니다 그런 다음 대화 상자에서 해당보기를 사용하십시오. 뷰는 것이다 : 다음

<div data-bind="widget: {kind:widgetId}">/div> 

...과 :

app.showModal('viewmodels/dialog'); 

는 'viewmodels/dialog.js'는 "대화"보기에 대한 뷰 - 모델이다.

참고 문헌 :

답변

2

위젯은 웹 페이지에 재사용 가능한 컨트롤로 의미가있다. 당신이하려는 일을 완전히 이해하는지 모르겠지만, 싱글 톤 객체가 아닌 생성자 함수를 반환하는 뷰를 정의 할 수 있습니다.

여기 싱글 반환하는 뷰의 :

define([], function() { 
    var singleton = { 
    title: "I'm Mr. Singleton" 
    }; 

    return singleton; 
}); 

여기에 같은보기이다, 그러나 그것의 생성자 함수 반환

define([], function() { 
    var notSingleton = function() { 
    this.title = "I'm NOT Mr. Singleton" 
    }; 

    return notSingleton; 
}); 

그런 다음 다른 뷰 모델 또는 모듈 내에서 다음 중 하나를 사용할 수 있습니다, 예 :

define(['viewmodels/singleton', 'viewmodels/notSingleton'], 
function(singleton, NotSingleton) { 
    ... 
    app.showModal(singelton); 
    app.showModal(new NotSingleton()); 
    ... 
}); 

후자의 경우 여러 개의 대화 상자를 만들 수 있습니다. 여러 뷰에 걸쳐 동일한 뷰 모델의 뷰를 가져올 수 있지만 각 뷰는 고유 한 속성을 가진 자체 인스턴스입니다. 해당 뷰 모델 유형의 모든 인스턴스에서 데이터 및/또는 비헤이비어를 공유하려는 경우 뷰 모델의 prototype에 추가 할 수 있습니다.

희망이 도움이됩니다.

관련 문제