2013-08-06 10 views
5

Sto andando a definire il mio modello in require js e ho bisogno di knockout e knockout validation plugin nel mio modulo e anche jQuery.Come caricare knockout.validation con knockout in requirejs

define(["knockout","jquery","knockout.validation"], function (ko,$,validation) { 
    // knockout model here with some knockout validation 

    return function SignUpViewModel() { 
    var self = this; 
    self.name = ko.observable(); 
    self.email = ko.observable().extend({ required: true }); 
    self.password = ko.observable().extend({ 
     required: true, 
     minLength: 6 
    }); 
    self.confirmPassword = ko.observable().extend({ mustEqual: self.password() }); 
    self.company = ko.observable(); 
    self.availableCountries = ko.observableArray(['Pakistan', 'USA', 'Egypt', 'UAE']); 
    self.selectedCountry = ko.observable(); 
    self.errors = ko.validation.group(self); 
    }   
}); 

Ma quando eseguo questo ho il seguente errore.

Uncaught ReferenceError: ko is not defined 

cerco anche di eseguire il debug e ha scoperto che tutte le altre librerie knockout, jquery stanno caricando perfettamente.

e qui è la mia parte config

require.config({ 
    baseUrl: "/Scripts", 
    paths: { 
    "Signup" : "Signup", 
    "knockout": "knockout-2.3.0", 
    "knockout.validation": "knockout.validation", 
    "jquery": "require-jquery" 
    } 
}); 
+0

Quale versione del knockout.validation stai usando? E da dove ottieni l'eccezione: 'Uncaught ReferenceError: ko non è definito? – nemesv

+0

Sto usando la versione '2.0' e vedo questo errore nel browser, quando eseguo il debug del mio modello. – Ancient

+0

Penso che tu abbia bisogno anche di uno shim per la validazione in quanto dipende da Konckout right –

risposta

4

Il vostro modello funziona bene con me, ecco il mio richiedono config:

requirejs.config({ 
    baseUrl: '/Scripts', 
    paths: { 
    'jquery': 'jquery-1.9.1.min', 
    'knockout' : 'knockout-2.3.0', 
    } 
}); 
// myModel.js is the file containing your model code. 
require(["myModel", "knockout"], function(model, ko){ 
    ko.applyBindings(new model()); 
}); 

myModel.js

define(["knockout","jquery","knockout.validation"], function (ko,$,validation) { 
// knockout model here with some knockout validation 

    return function SignUpViewModel() { 
    var self = this; 
    self.name = ko.observable(); 
    self.email = ko.observable().extend({ required: true }); 
    self.password = ko.observable().extend({ 
     required: true, 
     minLength: 6 
    }); 
    self.confirmPassword = ko.observable().extend({ mustEqual: self.password() }); 
    self.company = ko.observable(); 
    self.availableCountries = ko.observableArray(['Pakistan', 'USA', 'Egypt', 'UAE']); 
    self.selectedCountry = ko.observable(); 
    self.errors = ko.validation.group(self); 
    };   
}); 

e non hai bisogno di più require-jquery, dal momento che jQuery defines named AMD module 'jquery' (all lower case) when it detects AMD/RequireJS.

+0

Grazie mille grazie davvero. Mi hai salvato . – Ancient

+0

Ricevo ancora l'Errore Riferimento non rilevato: ko non è definito knockout.validation.js: 2 per 1.0.1 da nuget. –

3
require.config({ 
    baseUrl: "/Scripts", 
    paths: { 
     "Signup": "Signup", 
     "knockout": "knockout-2.3.0", 
     "knockout.validation": "knockout.validation", 
     "jquery": "require-jquery" 
    }, 
    shim: { 
     "knockout.validation": { 
      "deps": ["knockout"] 
     } 
    } 
}); 

http://www.requirejs.org/docs/api.html#config-shim

Problemi correlati