Knockout.js 要求js不使用敲除

Knockout.js 要求js不使用敲除,knockout.js,requirejs,Knockout.js,Requirejs,我在mvc4中使用requireJS 查看 <script data-main="/scripts/about" src="/scripts/require.js" ></script> <article> <p> Use this area to provide additional information. </p> </article> page1.js require.config({ pa

我在mvc4中使用requireJS

查看

<script data-main="/scripts/about" src="/scripts/require.js" ></script>
<article>
<p>
    Use this area to provide additional information.
</p>
</article>
page1.js

   require.config({

    paths: {
        page1: '/Scripts/page1',
        page2: '/Scripts/page2',
        knockout : '/Scripts/knockout-2.2.0'
      }

    });

     require(['page1', 'page2','knockout'], function (page1, page2) {

     var car = new page1.Car();
      car.speed(60);

      var cycle = new page2.Cycle();
      cycle.speed(20);



      console.log(car.speed());
     console.log(cycle.speed());
  });
    define(function(){

    function Car() {

    var self = this;
    self.speed = ko.observable();

     }

     });
第2页

  define(function () {

  function Cycle() {

    var self = this;
    self.speed = ko.observable();

   }

   });
控制台上显示
汽车
未定义

更新

  define(['knockout'],function(ko){

   function Car() {

    var self = this;
    self.speed = ko.observable();
    return {
        speed: self.speed() // But don't forget to declare it in the returned object!
       };
     }

  });
我在第一页和第二页都这么做了


提前感谢

AFAIK requirejs将加载的库隔离到单个文件中。在您的第1页和第2页中没有加载淘汰,因此未定义
ko
名称空间,因此
ko。未定义可观察对象,并且当您创建新车时,将未定义可观察对象。要解决此问题,您应该在第1页和第2页中加载knockout,并提供
ko
名称空间作为函数参数:

define(['knockout'], function(ko){

  function Car() {

    var self = this;
    self.speed = ko.observable();

  }

});
或者使用
ko=require('knockout')或加载一个垫片以使敲除成为全局命名空间

编辑:

至少你试过了。下面是后续行动

当您进行定义时,所有视图模型和其他视图模型都提供了此函数。这是requirejs函数,该函数应返回某些内容(即您的viewModel)。通过这种方式,您可以在定义的模块中拥有私有和公共变量和函数

define(['knockout'], function(ko){

  var Car = function () {
    var self = this;
    self.speed = ko.observable();
  }

  return Car;
});
名称仅对该模块作用域起作用。在about.js中,当您导入模块时,您可以决定如何调用它:

//load page1 script and give returned object 
//(this case a constructor) name: createCar
require(['page1'], function (createCar) {

  // now create new instance of your Car function:
  var car = new createCar();
  car.speed(60);

  console.log(car.speed());
});

AFAIK requirejs将加载的库隔离到单个文件中。在您的第1页和第2页中没有加载淘汰,因此未定义
ko
名称空间,因此
ko。未定义可观察对象,并且当您创建新车时,将未定义可观察对象。要解决此问题,您应该在第1页和第2页中加载knockout,并提供
ko
名称空间作为函数参数:

define(['knockout'], function(ko){

  function Car() {

    var self = this;
    self.speed = ko.observable();

  }

});
或者使用
ko=require('knockout')或加载一个垫片以使敲除成为全局命名空间

编辑:

至少你试过了。下面是后续行动

当您进行定义时,所有视图模型和其他视图模型都提供了此函数。这是requirejs函数,该函数应返回某些内容(即您的viewModel)。通过这种方式,您可以在定义的模块中拥有私有和公共变量和函数

define(['knockout'], function(ko){

  var Car = function () {
    var self = this;
    self.speed = ko.observable();
  }

  return Car;
});
名称仅对该模块作用域起作用。在about.js中,当您导入模块时,您可以决定如何调用它:

//load page1 script and give returned object 
//(this case a constructor) name: createCar
require(['page1'], function (createCar) {

  // now create new instance of your Car function:
  var car = new createCar();
  car.speed(60);

  console.log(car.speed());
});

您的模块需要
返回它们所表示的代码。例如,您的
汽车
模块应如下所示:

define(function(){    
    function Car() {
        var self = this;
        self.speed = ko.observable();
    };    
    return Car;
 });
模块在完成时必须表示一些东西,要么是函数(用于构造对象),要么是对象(用于表示单例)。定义模块后,您需要在另一个模块中使用它

define(['pathtoCar/relativeToDataMainAttribute/fromRequireScriptTag'], 
function(Car){
    var ferrari = new Car();
    ...
 });

您的模块需要
返回它们所表示的代码。例如,您的
汽车
模块应如下所示:

define(function(){    
    function Car() {
        var self = this;
        self.speed = ko.observable();
    };    
    return Car;
 });
模块在完成时必须表示一些东西,要么是函数(用于构造对象),要么是对象(用于表示单例)。定义模块后,您需要在另一个模块中使用它

define(['pathtoCar/relativeToDataMainAttribute/fromRequireScriptTag'], 
function(Car){
    var ferrari = new Car();
    ...
 });
你可以试试这个

 define(function () {

      function Cycle() {

        var self = this;
        self.speed = ko.observable();

       }

    ///////////////////ADDD   THISSSS NEWWWW LINEEEE//////////

    return new cycle();

   });
你可以试试这个

 define(function () {

      function Cycle() {

        var self = this;
        self.speed = ko.observable();

       }

    ///////////////////ADDD   THISSSS NEWWWW LINEEEE//////////

    return new cycle();

   });

另外,您的模块应该返回一些东西,请阅读关于定义模块的内容:请参阅我的更新,我尝试了返回,但仍然不起作用。需要定义哪些模块应该返回您的函数。您正在定义一个模块,当您的about.js调用该模块时,它不会提供任何内容。请看我的编辑,我希望这会澄清。另外,您的模块应该返回一些内容,请阅读有关定义模块的内容:请看我的更新,我尝试返回,但仍然不起作用。需要定义哪些模块应该返回您的函数。您正在定义一个模块,当您的about.js调用该模块时,它不会提供任何内容。看到我的编辑,我希望这将澄清。