Knockout.js 要求js不使用敲除
我在mvc4中使用requireJS 查看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
<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调用该模块时,它不会提供任何内容。看到我的编辑,我希望这将澄清。