我有一个视图助手,需要jquery,jqueryui,knockout和其他一些js文件才能工作。有些页面已经引用了视图助手所需的所有js文件,有些页面并没有。
现在,我正在使用url来确定是否应该在视图助手中引用js文件。
有更好的方法吗?
感谢。
答案 0 :(得分:0)
我不是100%确定我以正确的方式理解您的问题,但我100%确定您需要以更好的方式管理您的javascript依赖项。
我通常使用require.js模块加载器来管理模板中包含的javascript文件。
要使用它,您需要下载require.js file并将其放在项目中的某个位置。我相信您希望将其放在./public/js/vendors
目录中,而不是将其与您自己的代码放在一起。此外,您需要为其创建config
文件,您可以在其中决定需要哪些javascript模块。
所以,这个概念很清楚:如果你有javascript文件,这些文件与项目的某些部分有关,例如admin panel
,你应该创建一个config
来加载这些文件。我通常为我的网络应用程序的admin panel
部分配置一个配置,为user side
设置另一个配置。
这个带有require.js的配置本身包含在模板中,如下所示:
<script data-main="./js/config-admin.js" src="./js/vendor/require.js"></script>
你需要记住,在每个模板上你应该只包含一个javascript - 包含require.js和它的配置。
配置通常如下所示:
require.config({
baseUrl: '/public/js',
paths: {
'bootstrap': './vendor/bootstrap',
'jquery': './vendor/jquery'
},
shim: {
'bootstrap': ['jquery']
}
});
require(['./app'], function (app) {
console.log(app); //Here is smth that required module 'public/js/app.js' returns
//Do some coding here if you wish, for example to start js application.
});
如果您需要更多使用示例,可以访问我的github配置文件,我使用它有几个存储库(symfony和zend2应用程序)。
答案 1 :(得分:0)
如果您不通过其他方式管理资产,HeadScript
视图帮助程序将用作应在视图中呈现的脚本的集合。
考虑到JS文件中的帮助依赖,将它们放在帮助程序的工厂类中将是一个合理的位置。
class MyViewHelperFactory
{
public function __invoke(ViewPluginManager $viewHelperManager, $name, $requestedName)
{
$headScriptHelper = $viewHelperManager->get('HeadScript');
$headScriptHelper->appendFile('/js/file.js');
return new MyViewHelper();
}
}
当然有更好的方法来做这些事情;我个人喜欢Assetic。