2015-02-28 2 views
8

Я хочу включить мой сценарий js specific.js для определенного вида с идентификатором действия specific-action-id. Я не хочу, чтобы specific.js был включен в каждую страницу.Yii2 - Включить скрипт JS только для конкретного вида

Для включения сценария js для всего сайта я обычно должен редактировать AppAsset.php. С этой целью, что мне делать?

ответ

14

Вы должны просто зарегистрировать этот js-файл в своем представлении, например. :

$this->registerJsFile('@web/js/specific.js'); 

Подробнее: http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html#registering-scripts

+0

Это wo не добавляйте к определенному действию. Это общая процедура для добавления js-файла для просмотра. Чтобы добавить на основе идентификатора действия, возможно, потребуется перейти с событием afterAction. –

1

@soju прав. Но вы также можете создавать конкретные пакеты активов для использования определенных видов. Ваши специфические js-файлы могут быть группой файлов в этой ситуации, вы можете использовать пакеты активов и можете использовать любые виды, которые вы хотите.

1

Настоятельно рекомендуется использовать пакеты активов для регистрации внешних файлов JS, а не registerJsFile(), поскольку они обеспечивают лучшую гибкость и более подробную конфигурацию зависимостей. Кроме того, использование пакетов активов позволяет комбинировать и сжимать несколько JS-файлов, что желательно для сайтов с высоким трафиком.

Итак, вы можете создать новый файл AppAsset и поместить в него свои файлы css и javascript.

Создание активов Bundle

В каталоге \ активов, мы создаем StatusAsset.php:

<?php 
/** 
* @link http://www.yiiframework.com/ 
* @copyright Copyright (c) 2008 Yii Software LLC 
* @license http://www.yiiframework.com/license/ 
*/ 

namespace app\assets; 

use yii\web\AssetBundle; 

/** 
* @author Qiang Xue <[email protected]> 
* @since 2.0 
*/ 
class StatusAsset extends AssetBundle 
{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = []; 
    public $js = [ 
     '/js/jquery.simplyCountable.js', 
     '/js/twitter-text.js', 
     '/js/twitter_count.js', 
     '/js/status-counter.js', 
    ]; 
    public $depends = [ 
      'yii\web\YiiAsset', 
      'yii\bootstrap\BootstrapAsset', 
     ]; 
} 

В файле просмотра

use app\assets\StatusAsset; 
StatusAsset::register($this); 

Ресурсы http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html https://code.tutsplus.com/tutorials/how-to-program-with-yii2-working-with-asset-bundles--cms-23226