我在mvc4中使用require js。
查看
<script data-main="/scripts/about" src="/scripts/require.js" ></script>
<article>
<p>
Use this area to provide additional information.
</p>
</article>
about.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());
});
page1.js
define(function(){
function Car() {
var self = this;
self.speed = ko.observable();
}
});
第2页
define(function () {
function Cycle() {
var self = this;
self.speed = ko.observable();
}
});
在控制台中,它说Car
未定义。
更新
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!
};
}
});
我在page1和page2
中都这样做了提前致谢
答案 0 :(得分:1)
AFAIK requirejs将加载的库隔离到单个文件。在page1和page2中没有加载的敲除因此未定义ko
命名空间,因此未定义ko.observables
,并且当您创建新Car时,它将是未定义的。要解决此问题,您应该在page1和page2中加载knockout,同时提供ko
命名空间作为函数参数:
define(['knockout'], function(ko){
function Car() {
var self = this;
self.speed = ko.observable();
}
});
或使用ko = require('knockout');
或将knock的shim加载为全局命名空间
修改强>
至少你试过了。所以这是跟进。
当您进行定义时,您可以使用所有视图模型和其他模型提供此功能。它是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());
});
答案 1 :(得分:0)
您的模块需要return
他们代表的代码。例如,您的Car
模块应如下所示:
define(function(){
function Car() {
var self = this;
self.speed = ko.observable();
};
return Car;
});
模块必须在完成时表示某些东西,无论是函数(构造对象)还是对象(代表单例)。定义模块后,您require
在另一个模块中使用它。
define(['pathtoCar/relativeToDataMainAttribute/fromRequireScriptTag'],
function(Car){
var ferrari = new Car();
...
});
答案 2 :(得分:0)
你可以试试这个
define(function () {
function Cycle() {
var self = this;
self.speed = ko.observable();
}
///////////////////ADDD THISSSS NEWWWW LINEEEE//////////
return new cycle();
});