2012-06-25 2 views
17

require.js에서 매핑 플러그인을로드하는 표준 방법은 무엇입니까?require.js로 Knockout.js 매핑 플러그인

다음은 내 config.js (require.js 설정 파일) 내보기 모델 그러나

define(['knockout', 'knockoutmapping'], function(ko, mapping) { 
} 

에서

require.config({ 
    // Initialize the application with the main application file. 
    deps: ["app"], 

    paths:{ 
     // JavaScript folders. 
     libs: "lib", 
     plugins: "lib/plugin", 
     templates: "../templates", 

     // Libraries. 
     jquery: "lib/jquery-1.7.2.min", 
     underscore: "lib/lodash", 
     text: 'text', 
     order: 'order', 
     knockout: "lib/knockout", 
     knockoutmapping: "lib/plugin/knockout-mapping" 

    }, 

    shim:{ 
     underscore:{ 
      exports: '_' 
     }, 

     knockout:{ 
      deps: ["jquery"], 
      exports: "knockout" 
     } 
    } 
} 

가 매핑 ko.mapping에 바인딩되지이다. 모든 포인터/제안을 주시면 감사하겠습니다. AMD와 함께 사용하면

덕분에, 라비

답변

30

는 매핑 플러그인은 별도의 객체로 그 기능을 내 보냅니다. 따라서이 기능은 mapping 변수에 연결되며 메서드는 mapping.fromJS과 같이 호출합니다.

변경할 수없는 코드가 ko.mapping 인 코드의 경우 코드에 을 mapping과 동일하게 설정할 수 있습니다.

+0

+1이 방법은 – daedalus28

+0

입니다. ko.mapping을 계속 사용할 수 있도록 매핑하는 방법은 무엇입니까? – David

+0

필요하다면 ko 객체에 매핑 객체를 첨부 할 수 있습니다. –

4

참고로 Lo-Dash을 사용하고 있으므로 RequireJS "shim"옵션에 "밑줄"을 포함 할 필요가 없습니다. 소호 - 대시는 AMD 지원에 구운있다

7

당신의 구성 개체가 종속 세트 및 추가 종속 구성/조작을 수행 할 수있는 콜백을 지정할 수 있습니다. 당신이 마크 업에 스크립트를 포함 할 때

var require = { 
    paths: { 
    'knockout': '...', 
    'mapping': '...' 
    }, 

    // configuration dependencies 

    deps: ['knockout', 'mapping'], 

    // configuration callback 

    callback: function (ko, mapping) { 
    ko.mapping = mapping; 
    } 
}; 

을 그리고를 , 설정은 이전에로드해야이 필요합니다 모듈 정의에 사용하면 원하는대로 이제

<script src="/scripts/config.js" /> 
<script src="/scripts/require.js" /> 

이 Knockout.js가 ko.mapping 속성을 사용할 수 있습니다.

define(['knockout'], function (ko) { 
    // ko.mapping is available 
}); 

이것은 간단한 구성 예입니다. 매핑 플러그인이 적절한 수출을 지정하는 데 필요한 약간의 shimming이 있습니다. 단지 내 머리 꼭대기를 기억하지 마십시오.

+0

나는 콜백이 실행되기 전에 require ([..]가 콜백이 실행되기 전에 호출되고 있습니다.) 콜백이 어떻게 ko.mapping을 설정하는지는 정말 마음에 들지만 항상 나를 위해 일하지 않는다. – Brandon