requirejs 如何正确设置依赖文件以便能够在它们之间传递变量?
requirejs how to setup dependencies files correctly to be able to pass variables between them?
我刚开始使用 requirejs,我很难弄清楚如何 link 建立这些文件。通常我只是以正确的加载顺序包含 js 文件。
main.js
requirejs.config({
paths: {
"jquery": "jquery-3.3.1",
"jquery-ui": "jquery-ui",
"dataTables": "DataTables/datatables",
"toastr": "toastr",
"ajaxConfiguration": "myScripts/ajaxConfiguration",
"dataTablesConfiguration": "myScripts/dataTablesConfiguration",
"jqueryUiConfiguration": "myScripts/jqueryUiConfiguration",
"updateDatabaseBtn": "myScripts/updateDatabaseBtn"
},
});
require(['jqueryUiConfiguration', 'updateDatabaseBtn'],
function() {
});
首先,这是有道理的,因为这个文件依赖于 jquery-ui 和 jquery 来运行。所以简单地添加这些作为依赖项是很直接的。
jqueryUiConfiguration.js
define(['jquery', 'jquery-ui'],
function() {
$(document).ready(function() {
$("#tabs").tabs();
$("#updateBtn").button();
});
});
其次,这个只需要 jquery 所以再次添加依赖项很简单。
ajaxConfiguration.js
define(['jquery'], function () {
var updateDatabaseBtnClicked = false;
$(document).ready(function() {
$(document).ajaxStart(function() {
if (updateDatabaseBtnClicked) {
$("#loading").css("display", "block");
$("#overlay").css("display", "block");
}
});
$(document).ajaxComplete(function() {
$("#loading").css("display", "none");
$("#overlay").css("display", "none");
updateDatabaseBtnClicked = false;
});
});
});
和这个一样。
dataTablesConfiguration.js
define(['jquery', 'dataTables'],
function () {
var $table;
$(document).ready(function() {
$table = $("#transactionTable").DataTable({
"processing": true,
type: "GET",
ajax: {
url: "DataService.svc/GetDataAsJsonObjects",
dataSrc: ""
},
"columns": [
{ data: "CustomerName" },
{ data: "CompanyName" },
{ data: "CurrentBalance" }
]
});
});
});
然而,这是实际需要在其中使用代码的文件
dataTablesConfiguration.js 和 ajaxConfiguration.js,以及 toastr.js 中的一些方法,我不知道如何 ui 确定如何将它们 link 在一起,因为它们需要访问来自这些文件的变量
updateDatabaseBtn.js
define(['dataTablesConfiguration', 'ajaxConfiguration', 'toastr'], // this is not right
function() {
$(document).ready(function() {
$("#updateBtn").click(function() {
updateDatabaseBtnClicked = true;
$.ajax({
type: "POST",
url: "myApi",
dataType: "json",
contentType: "application/json; charset=utf-8"
})
.done(function() {
$table.ajax.reload();
toastr.success("Database updated");
})
.fail(function() {
toastr.error("Something unexpected happened");
});
});
});
});
您可以作为回调参数传递并访问另一个模块中的模块
例如
define(['dataTablesConfiguration', 'ajaxConfiguration', 'toastr'],
function(dataTablesConfiguration,ajaxConfiguration,toastr) {
toastr.success("Database updated");
}
要从配置文件中提供正确的顺序,您可以使用 sim 配置文件。
例如。
"shim": {
"bootstrap-responsive": {
"deps": [ "bootstrap", "respond" ],
"exports": "bootstrap-responsive"
},
"komapping": {
"deps": [ "knockout" ],
"exports": "komapping"
},
"bootstrap": {
"deps": [ "jquery" ],
"exports": "bootstrap"
},
"bootstrap-dialog": {
"deps": [ "bootstrap", "jquery" ],
"exports": "bootstrap-dialog"
},
"jquery-ui": {
"deps": [ "jquery" ],
"exports": "$"
}
}
我刚开始使用 requirejs,我很难弄清楚如何 link 建立这些文件。通常我只是以正确的加载顺序包含 js 文件。
main.js
requirejs.config({
paths: {
"jquery": "jquery-3.3.1",
"jquery-ui": "jquery-ui",
"dataTables": "DataTables/datatables",
"toastr": "toastr",
"ajaxConfiguration": "myScripts/ajaxConfiguration",
"dataTablesConfiguration": "myScripts/dataTablesConfiguration",
"jqueryUiConfiguration": "myScripts/jqueryUiConfiguration",
"updateDatabaseBtn": "myScripts/updateDatabaseBtn"
},
});
require(['jqueryUiConfiguration', 'updateDatabaseBtn'],
function() {
});
首先,这是有道理的,因为这个文件依赖于 jquery-ui 和 jquery 来运行。所以简单地添加这些作为依赖项是很直接的。
jqueryUiConfiguration.js
define(['jquery', 'jquery-ui'],
function() {
$(document).ready(function() {
$("#tabs").tabs();
$("#updateBtn").button();
});
});
其次,这个只需要 jquery 所以再次添加依赖项很简单。
ajaxConfiguration.js
define(['jquery'], function () {
var updateDatabaseBtnClicked = false;
$(document).ready(function() {
$(document).ajaxStart(function() {
if (updateDatabaseBtnClicked) {
$("#loading").css("display", "block");
$("#overlay").css("display", "block");
}
});
$(document).ajaxComplete(function() {
$("#loading").css("display", "none");
$("#overlay").css("display", "none");
updateDatabaseBtnClicked = false;
});
});
});
和这个一样。
dataTablesConfiguration.js
define(['jquery', 'dataTables'],
function () {
var $table;
$(document).ready(function() {
$table = $("#transactionTable").DataTable({
"processing": true,
type: "GET",
ajax: {
url: "DataService.svc/GetDataAsJsonObjects",
dataSrc: ""
},
"columns": [
{ data: "CustomerName" },
{ data: "CompanyName" },
{ data: "CurrentBalance" }
]
});
});
});
然而,这是实际需要在其中使用代码的文件 dataTablesConfiguration.js 和 ajaxConfiguration.js,以及 toastr.js 中的一些方法,我不知道如何 ui 确定如何将它们 link 在一起,因为它们需要访问来自这些文件的变量
updateDatabaseBtn.js
define(['dataTablesConfiguration', 'ajaxConfiguration', 'toastr'], // this is not right
function() {
$(document).ready(function() {
$("#updateBtn").click(function() {
updateDatabaseBtnClicked = true;
$.ajax({
type: "POST",
url: "myApi",
dataType: "json",
contentType: "application/json; charset=utf-8"
})
.done(function() {
$table.ajax.reload();
toastr.success("Database updated");
})
.fail(function() {
toastr.error("Something unexpected happened");
});
});
});
});
您可以作为回调参数传递并访问另一个模块中的模块
例如
define(['dataTablesConfiguration', 'ajaxConfiguration', 'toastr'],
function(dataTablesConfiguration,ajaxConfiguration,toastr) {
toastr.success("Database updated");
}
要从配置文件中提供正确的顺序,您可以使用 sim 配置文件。 例如。
"shim": {
"bootstrap-responsive": {
"deps": [ "bootstrap", "respond" ],
"exports": "bootstrap-responsive"
},
"komapping": {
"deps": [ "knockout" ],
"exports": "komapping"
},
"bootstrap": {
"deps": [ "jquery" ],
"exports": "bootstrap"
},
"bootstrap-dialog": {
"deps": [ "bootstrap", "jquery" ],
"exports": "bootstrap-dialog"
},
"jquery-ui": {
"deps": [ "jquery" ],
"exports": "$"
}
}