0

在我的 CakePHP 应用程序中,我定义了一个向导供应商,它输出多步向导类型插件的 HTML 及其相关的 Javascript 代码。我想使用 JsHelper 以便我可以将我的代码缓冲到页面底部。

其他一切都在工作,包括我的 Javascript 代码,如果我直接用 HTML 输出它的话。我只是不太清楚如何使用 JsHelper。我是否使用 App:Uses 或 App:Import 语句?在视图中使用它时,我可以在控制器级别定义它,但这在这里不起作用。

$this->Js->buffer("

$('.mws-wizard').wizard({
    buttonContainerClass: 'mws-button-row', 
    orientation: '$orientation',
    forwardOnly: $forwardOnly
});

");

4

2 回答 2

1

如果您自己开发此“供应商”软件包,则不应将其开发为“供应商”,而应将其开发为插件。

供应商文件夹旨在包含未使用 CakePHP 开发的第三方库(例如,在您的应用程序中使用 Zend 框架的一部分)。

手册

注意:加载供应商通常意味着您正在加载不遵循约定的包。对于大多数供应商包,建议使用 App::import()。

创建插件而不是供应商

要开发可用于不同项目/应用程序的可重用代码,请将您的代码开发为插件。插件基本上是“迷你 CakePHP 应用程序”。插件中的类可以在您的应用程序中使用,反之亦然;插件可以像在应用程序中使用 CakePHP 助手一样使用它们。

请参阅创建您自己的插件

关于 JsHelper

与 Sam Delaney 的评论相反,您对 JsHelper 的使用对我来说看起来不错。将一些脚本添加到 Js 缓冲区以将其输出到布局中似乎很有用。只是不要尝试将它用于扩展的 JavaScript 块;应该放在外部 .js 文件中。

建议您自己编写 JavaScript代码,不要让 JsHelper为您生成代码(例如,不要使用$this->Js->get('#foo')->event('click', $eventCode);)。这可能是个人的,但是 IMO 这使得跟踪/调试您的 JavaScript 变得更加困难,并且不比仅仅更具可读性$('#foo').click('event code');

于 2013-04-21T10:44:41.223 回答
0

我个人从来没有发现 CakePHP 中的 JavaScript 帮助器有任何用处,就好像你不小心,你最终会得到<script>标记乱七八糟的标记,这有时会使调试变得非常困难。根据您的描述,您将 JavaScript 聚合并附加在 HTML 的底部,因此它没有我之前强调的情况那么糟糕。

是否不可能将所有 JavaScript 重新定位到 .js 文件以封装向导插件/供应商的所有功能?如果你能做到这一点,这将符合 MVC 原则,你可以在逻辑上分离视图标记和表示逻辑。

于 2013-04-21T08:00:14.477 回答