2013-08-06 28 views
5

Tôi sẽ xác định mô hình của tôi trong yêu cầu js và tôi cần knockoutknockout validation plugin trong mô-đun của tôi và cũng jquery.Làm thế nào để tải knockout.validation với knockout trong 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); 
    }   
}); 

Nhưng khi tôi chạy, tôi gặp lỗi sau.

Uncaught ReferenceError: ko is not defined 

tôi cũng cố gắng để gỡ lỗi và phát hiện ra rằng tất cả các thư viện khác knockout, jquery đang tải một cách hoàn hảo.

và đây là phần cấu hình của tôi

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

Bạn đang sử dụng phiên bản knockout.validation nào? Và từ đâu bạn nhận được ngoại lệ: 'Uncaught ReferenceError: ko được định nghĩa'? – nemesv

+0

Tôi đang sử dụng phiên bản '2.0' và tôi thấy lỗi này trong trình duyệt, khi tôi gỡ lỗi mô hình của mình. – Ancient

+0

Tôi nghĩ rằng bạn cũng cần một shim để xác nhận vì nó phụ thuộc vào Konckout ngay –

Trả lời

4

Mô hình của bạn hoạt động tốt với tôi, đây là yêu cầu của tôi cấu hình:

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); 
    };   
}); 

và bạn không cần require-jquery nữa, kể từ jQuery defines named AMD module 'jquery' (all lower case) when it detects AMD/RequireJS.

+0

Cảm ơn rất nhiều thực sự thực sự cảm ơn. Bạn đã cứu tôi . – Ancient

+0

Tôi vẫn nhận được tham chiếu Uncaught: ko được định nghĩa knockout.validation.js: 2 cho 1.0.1 từ 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