我完全开始使用 RequireJS,因为我觉得它很有用,但我仍然陷入一个简单的编程问题:当我用完范围时(比如当我在 jQuery 回调函数中编码时),我不知道确切的正确的方式来指代我在哪里。我有一个例子:这段代码在我项目的 src/dir 中,我在 lib/ 中有 jquery.js 和 require.js。
// src/main.js
define(function() {
return {
setup: function(settings){
this.settings = settings;
},
start: function(){
this.initScr();
},
initScr: function(){
var screen = $('<canvas>').attr({
width: window.innerWidth,
height: window.innerHeight
});
$('body').append(screen);
this.DOM.screen = screen[0];
$(window).resize(function(){
require(['game/main'], function(game) {
console.log(this);
game.DOM.screen.width = window.innerWidth;
game.DOM.screen.height = window.innerHeight;
});
});
},
settings: {},
DOM: {}
};
});
这里的问题是,当在我的“模块”中,特别是在此处的 jQuery 回调中时,如何从该回调中更改模块对象的属性?我不能在这里使用“this”关键字,因为它不再是我想要的。什么是最好的解决方案?我在这里使用 require 所做的事情让我感到非常奇怪。
谢谢阅读
编辑:
最后,在 pax162 的回答的帮助下,我做到了。
define(function() {
var initScr = function(){
var screen = $('<canvas>').attr({
width: window.innerWidth,
height: window.innerHeight
});
$('body').append(screen);
DOM.screen = screen[0];
$(window).resize(function(){
DOM.screen.width = window.innerWidth;
DOM.screen.height = window.innerHeight;
});
};
var start = function(){
initScr();
};
var setup = function(settings1){
settings = settings1;
};
var settings = {};
var DOM = {};
return {
setup: setup,
start: start,
initScr:initScr,
settings: settings,
DOM: DOM
};
});