2012-06-25 23 views
17

¿Cuál es la forma estándar de cargar el plugin de mapeo en require.js?Plugin de asignación de Knockout.js con require.js

abajo es mi config.js (require.js archivo de configuración)

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" 
     } 
    } 
} 

En mi vista del modelo

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

Sin embargo, el mapeo no está obligado a ko.mapping. Cualquier sugerencia/sugerencias sería apreciada.

Gracias, Ravi

Respuesta

30

Cuando se utiliza con AMD, el plugin mapeo exporta su funcionalidad en un objeto separado. Por lo tanto, la funcionalidad se adjuntará a su variable mapping y llamaría a los métodos fuera de ella (como mapping.fromJS).

Puede optar por establecer ko.mapping igual a mapping en su código, si tiene un código que se basa en ko.mapping que no puede cambiar.

+0

+1 Esta es la manera de hacerlo – daedalus28

+0

¿Cómo puedo mapear para poder seguir utilizando ko.mapping? ty – David

+0

puede adjuntar el objeto de mapeo al objeto ko, si es necesario. –

4

Como nota al margen, como está utilizando Lo-Dash, no necesita incluir "guión bajo" en las opciones "shim" de RequireJS. Lo-Dash ha de soporte de AMD al horno en

7

Su objeto de configuración puede especificar un conjunto de dependencias y una devolución de llamada cuando más la dependencia de configuración/manipulación puede realizarse:.

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

    // configuration dependencies 

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

    // configuration callback 

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

Y cuando se incluyen las secuencias de comandos en el marcado , configuración debe cargarse antes requieren:

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

Ahora, Knockout.js estará disponible con una propiedad deseada ko.mapping como cuando se usa en una definición de módulo.

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

Tenga en cuenta que este es un ejemplo de configuración abreviada. Se necesita algo de ajuste para que el plugin de mapeo especifique las exportaciones adecuadas, pero no recuerdo de qué se trata.

+0

Me encuentro con una condición de carrera donde requiero ([... se llama antes de que se ejecute la devolución de llamada. Me gusta mucho cómo la devolución de llamada configura ko.mapping, pero no funciona para mí todo el tiempo – Brandon

Cuestiones relacionadas