Durandal 的定义块使用 require.js 不带参数

Durandal's define block using require.js with no parameter

我需要在我的 javascript 文件中为我的一个页面使用一个库。我发现我可以使用:

define(["plugins/http", "someLibrary"], function (http, foo) {
    /* code: never using "foo", but using methods from someLibrary */
}

最初,我期望 foo 有一个值,因为所有其他示例(如 http)都有参数值,但这显然不是 someLibrary 的工作方式。将 foo 作为参数似乎没有用,所以我将其删除以查看它是否仍然有效,并且确实有效。

这个参数关掉可以吗?在这种情况下,Durandal/Require.js 最佳实践的普遍共识是什么?这两种选择似乎都不是特别优雅。有没有更好的方法来实现同样的目标?

是的。有各种设​​置行为的库,例如 bootstrap,这些可以包含在 require 语句中但不包含在函数参数中。也可以这样写 require.js shorthand:

var http = require('plugins/http');
require('somelibrary');

function viewModel() {
    ...
}

如果插件 return 是一个引用(如 plugins\http 情况),您只需要一个分配的变量。

一些插件将自身附加到其他对象或插件,向其他对象添加功能或属性,因此它不会 return 任何引用(如您示例中的 someLibrary)。所以你不需要一个变量。

我个人的做法是define(...)中的插件根据是否需要分配变量来排序,不需要变量的插件,将稍后定义,那些需要变量的将定义。这是为了与 javascript 的 function 定义方式保持一致,您始终将可选参数放在右侧。