Durandal中哪种RequireJS语法正确?

Durandal中哪种RequireJS语法正确?,requirejs,durandal,Requirejs,Durandal,我对Durandal非常陌生,但考虑到我在jQuery和一点KnockoutJS方面的背景,我认为这是一个很棒的框架,但是我遇到了两种使用RequireJS和Durandal的不同方法 在Durandal示例中,使用了以下语法: 这里,依赖项/需求(这里是正确的词吗?)被定义为调用define的第一个参数(['durandal/app','./customModal']) 在Durandal文档中,使用了以下语法: 在这里,只将函数传递给调用define,require作为该函数的依赖项/需

我对Durandal非常陌生,但考虑到我在jQuery和一点KnockoutJS方面的背景,我认为这是一个很棒的框架,但是我遇到了两种使用RequireJS和Durandal的不同方法

在Durandal示例中,使用了以下语法:

这里,依赖项/需求(这里是正确的词吗?)被定义为调用define的第一个参数(
['durandal/app','./customModal']

在Durandal文档中,使用了以下语法:

在这里,只将函数传递给调用define,require作为该函数的依赖项/需求。然后调用require函数以获取所需的实际依赖项/需求(
var backend=require('backend');

来自.NETIOC的背景第一个似乎是正确的,定义我的需求,让requirejs框架为我定位依赖项,第二个似乎是服务定位器反模式

我对这两种方法的解释是否正确,是否应该使用第一种方法,并且文档是错误的(!)

如果没有,这两种方法的优缺点是什么?建议使用哪一种?为什么


非常感谢

我想你最喜欢哪种方式都是最好的方式。我认为是requirejs做的,所以你可以用两种方式来做,这样它就可以支持

根据requirejs的网站,如果您使用durandal解决其依赖关系的方式:

define(function(require) { var app = require('durandal/app');  app.start(); }
“此包装依赖于Function.prototype.toString()为函数内容提供有用的字符串值。这在某些设备(如PS3和一些较旧的Opera mobile浏览器)上不起作用。”--

但这是一个边缘案例,我认为没有太多人关心它。除此之外。。我会挑你最喜欢的那一套

我不知道你所说的服务定位器反模式是什么意思。我很确定这两种方法都是有效的,不管怎样,你选择这样做纯粹是为了美观

编辑**

Durandal不再使用上述模式来解析其依赖关系。它现在使用这种方式:

define(['./app','./system'], function (app, system) { //... });

两种方法都是正确的。请查阅所需的JS文档。Durandal JS基于JQuery、Knockout和RequireJS构建。浏览这篇博文

define(function(require) { var app = require('durandal/app');  app.start(); }
define(['./app','./system'], function (app, system) { //... });