首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yii和jquery以及javascript inclusion...confused

Yii和jquery以及javascript inclusion...confused
EN

Stack Overflow用户
提问于 2012-11-08 00:05:55
回答 2查看 5.3K关注 0票数 1

来自http://www.yiiframework.com/forum/index.php/topic/37313-confused-about-jquery-and-script-inclusion-handling/的交叉发布,但有时人们在这里回答得更快……

我完全搞不懂Yii对jquery和其他javascript文件包含的处理。

这是有效的:

代码语言:javascript
复制
<script type="text/javascript">
    jQuery(document).ready(function() {
        jQuery('#Event_recuring_nature, #Event_venue, #Event_expected_attendance, #Event_age_group, #Event_state, #Event_gender, #Event_ethnicity, #Event_exclusivity, #Package_cash_product_sponsorships, #Event_vanue_signature, #Event_logo_on_step_and_repeat, #Event_inclusion_in_press, #Event_ad_space, #Event_inclusion_in_event_materials, #Package_category_exclusivity, #logo_on_signature, #Event_proposed_events_included, #Event_dependant_on_sponsorship, #Event_sponsorship_type, #Event_attendee_professions, #Event_attendee_income').yaselect();
    });
</script>
<script type="text/javascript" src="/js/libs/jquery-ui-datetimepicker.js"></script>
<script type="text/javascript" src="/js/event_create.js"></script>
<script type="text/javascript" src="/js/slider.js"></script>
<script type="text/javascript" src="/js/other_social.js"></script>
<script type="text/javascript" src="/js/package.js"></script>

而这个(假设哪个会更好?)不会:

代码语言:javascript
复制
<?php 
Yii::app()->clientScript->registerScript('create-script', "
    $(function()  {
          $('body').css('overflow-x','hidden');
        $('#Event_recuring_nature, #Event_venue, #Event_expected_attendance, #Event_age_group, #Event_state, #Event_gender, #Event_ethnicity, #Event_exclusivity, #Package_cash_product_sponsorships, #Event_vanue_signature, #Event_logo_on_step_and_repeat, #Event_inclusion_in_press, #Event_ad_space, #Event_inclusion_in_event_materials, #Package_category_exclusivity, #logo_on_signature, #Event_proposed_events_included, #Event_dependant_on_sponsorship, #Event_sponsorship_type, #Event_attendee_professions, #Event_attendee_income').yaselect();
    });

");
?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery-ui-datetimepicker.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/event_create.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/slider.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/other_social.js'); ?>
<?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/package.js'); ?>

我为所有的javascript创建了<app_dir>/js/目录,并创建了<app_dir>/protected/assets/js,就像registerScriptFile的yii论坛上的一篇文章所建议的那样(据说它可以很好地处理脚本包含)。当然,我最终得到了重复的文件,我正在清理。

布局在标题中包含以下内容:

代码语言:javascript
复制
    <?php Yii::app()->clientScript->registerCoreScript('jquery')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery-ui-1.8.20.custom.min.js')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/libs/jquery.yaselect.min.js')?>
    <?php Yii::app()->clientScript->registerScriptFile($this->assetsBase.'/js/script.js')?>

我在config/main.php中有:

代码语言:javascript
复制
// application components
   'components'=>array(
      'clientScript'=>array(
            'packages'=>array(
                 'jquery'=>array(
                     'baseUrl'=>Yii::app()->request->baseUrl . '/js/libs/',
                     'js'=>array('jquery-1.7.2.min.js')
                  )                                       
             )
      ),

(我知道baseUrl现在指向/js,但尝试使用

代码语言:javascript
复制
'baseUrl'=>Yii::app()->basePath . '/assets/js/libs' 

也根本没有加载jquery!

请帮帮我!我是Yii的新手,在这个问题上我失去了理智。谢谢。

EDIT:这是代码生成的内容:

代码语言:javascript
复制
<script type="text/javascript" src="/js/libs/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="/assets/ab20866e/jquery.yiiactiveform.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery-ui-datetimepicker.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/event_create.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/slider.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/other_social.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/package.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery-ui-1.8.20.custom.min.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/libs/jquery.yaselect.min.js"></script>
<script type="text/javascript" src="/assets/2dfe5520/js/script.js"></script>

对我来说,第二行/assets/ab20866e/jquery.yi iactiveform.js看起来很可疑,因为它具有不同的资产id……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-08 00:53:23

虽然我面前没有你的布局文件,但看起来你的布局在脚本文件注册之前有$content

因此,先加载视图中的脚本,然后加载模板中的脚本。发生这种情况时,将加载datetime选择器,但会报告错误,因为jquery-ui尚未加载。确保您的模板在$content之前加载了脚本。

或者,您可以通过指定位置参数来强制加载到视图中的脚本位于body中,而不是head中,例如:

代码语言:javascript
复制
<?php Yii::app()->clientScript->registerScriptFile(Yii::app()->request->baseUrl . '/js/libs/jquery-ui-datetimepicker.js', CClientScript::POS_BEGIN); ?>
票数 3
EN

Stack Overflow用户

发布于 2012-11-08 04:32:55

另一件要考虑的事情是强制Yii从一开始就加载jQuery,如下所示:

代码语言:javascript
复制
cs()->registerCoreScript('jquery');

您也可以像这样加载jQuery UI:

代码语言:javascript
复制
cs()->registerCoreScript('jquery.ui');

我发现这解决了加载其他jQuery库和文件时的许多registerScriptFile POS/POS问题(如ernies答案所示)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13273516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档