0

在 Node.js 之上的 Mojito 中,我遵循了http://developer.yahoo.com/cocktails/mojito/docs/quickstart/上的示例

我所做的是重命名controller.server.jscontroller.server-foo.js,并创建了一个新文件controller.server.js来显示“Hello World”。

但是当启动 mojito 时,controller.server-foo.js正在使用旧文件,因此不会打印“Hello World”。Mojito 怎么会使用旧文件?

(我也尝试重命名controller.server-foo.jsfoo-controller.server.js,现在打印了“Hello World”,但为什么要controller.server-foo.js使用?)

4

2 回答 2

0

我发现从历史上看,控制器的“亲和力”可以是两部分。第一部分是common, server, or client,第二部分是可选的,可能是tests, 或者其他词,所以使用其他名称,例如controller-not-used-server.js禁用它。

于 2013-02-07T03:18:40.290 回答
0

@Charles,mojito 中有 3 个注册过程(是的,一开始很混乱):

  • 亲和性(服务器、客户端或公共)。
  • 在创建 yui 模块(控制器、模型、绑定器等)时添加 YUI.add
  • 不太常见的是按名称注册(包括我们称之为选择器的东西)

在您的情况下,通过拥有两个控制器,其中一个带有名为“foo”的自定义选择器,您可以立即使用 3 个注册。以下是内部发生的情况:

  • 控制器总是从 mojit 文件夹中引爆为“控制器”文件名,这是按名称注册的一部分,并且由于您为其中一个控制器提供了“foo”选择器,因此您的 mojit 必须使用“默认”和“模式”富”。其中哪一个会被使用?取决于application.json,你可以在其中有一些条件来设置“selector”的值,默认为空。例如,如果您在设备是 iphone 时将选择器的值设置为“foo”,那么当该条件匹配时,将使用该控制器。
  • Then the YUI.add plays an important role, it is the way we can identify which controller should be used, and its only requirement is that NO OTHER MODULE in the app can have the same YUI Module name, which means that your controllers can't be named the same when registering them thru YUI.add. And I'm sure this is what is happening in your case. If they both have the same name under YUI.add() one will always override the other, and you should probably see that in the logs as a warning, if not, feel free to open an issue thru github.

To summarize:

  • The names used when registering YUI modules have to be unique, in your case, you can use: YUI.add('MyMojit', function(){}) and YUI.add('MyMojitFoo', function(){}), for each controller.
  • Use the selector (e.g.: controller.server-mobile.js) to select which YUI module should be used for a particular request by setting selector to the proper value in application.json.
于 2013-03-11T17:01:00.847 回答