【问题标题】:How to load knockout.validation with knockout in requirejs如何在requirejs中加载knockout.validation
【发布时间】:2013-08-07 00:33:26
【问题描述】:

我将在 require js 中定义我的模型,我需要在我的模块和 jquery 中使用 knockoutknockout validation plugin

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

但是当我运行这个时,我得到了以下错误。

Uncaught ReferenceError: ko is not defined

我也尝试调试,发现所有其他库knockoutjquery 都在完美加载。

这是我的配置部分

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

【问题讨论】:

  • 您使用的是哪个版本的 knockout.validation?你从哪里得到异常:Uncaught ReferenceError: ko is not defined?
  • 我正在使用版本2.0,当我调试我的模型时,我在浏览器中看到了这个错误。
  • 我认为您还需要一个 shim 进行验证,因为它依赖于 Konckout 权限
  • 没有2.0版本的验证插件...你在哪里下载的脚本:github?努吉特? cdnjs?别的地方?因为验证插件从 2012.08 开始支持 requirejs,所以理论上不需要 shim 来使用它。
  • 我是从 nuget 下载的,很抱歉版本名称是 1.0.1

标签: jquery knockout.js requirejs knockout-validation


【解决方案1】:

你的模型适合我,这是我的要求配置:

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

你不再需要require-jquery,因为jQuery defines named AMD module 'jquery' (all lower case) when it detects AMD/RequireJS.

【讨论】:

  • 我仍然收到 Uncaught ReferenceError: ko is not defined knockout.validation.js:2 for 1.0.1 from nuget。
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 2017-07-20
    • 2013-02-22
    • 2021-10-02
    • 2013-01-28
    • 2016-06-22
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多