function __construct($opts) { if (!($model = MMap::getValue($opts, 'model'))) { throw new Exception('no model for list display'); } $this->model = $model; $this->opts = $opts; $columns = array(); if (isset($opts['columns'])) { foreach ($opts['columns'] as $k => $v) { if ('buttons' === $k) { !$v && ($v = array()); $v = array_merge($v, array('grid' => $this)); $this->buttons = new MButton($v); continue; } else { if (is_array($v)) { $columns[$v[0]] = array_slice($v, 1); } else { $columns[$v] = array(); } } } } $this->columns = $columns; $options = array('url' => app()->controller->getRequest()->uri, 'ajaxType' => 'GET', 'ajaxUpdate' => array($this->id), 'pageVar' => $this->pagerVar(), 'ajaxVar' => $this->ajaxVar, 'pagerClass' => 'pagination', 'loadingClass' => 'grid-view-loading', 'filterClass' => 'filters', 'tableClass' => 'items table table-hover', 'selectableRows' => 1, 'enableHistory' => false, 'updateSelector' => '{page}, {sort}', 'filterSelector' => '{filter}'); $options = MJavaScript::encode($options); app()->controller->appendScript(__CLASS__ . '#' . $this->getId(), "jQuery('#{$this->id}').yiiGridView({$options});"); }
function parseConfirmButton($id) { $button = $this->buttons[$id]; if (!isset($this->buttons[$id]['click'])) { $confirmation = "if(!confirm(" . MJavaScript::encode(isset($button['confirm']) ? $button['confirm'] : '确定执行?') . ")) return false;"; $csrf = ''; $after = 'function(){}'; $funcNam = str_replace('-', '_', 'gridFunc' . $this->grid->id . $id); $this->buttons[$id]['click'] = <<<EOD function {$funcNam}() { {$confirmation} var th = this, afterFunc = {$after}; console.log('do confirm') console.log(this) jQuery('#{$this->grid->id}').yiiGridView('update', { type: 'POST', url: jQuery(this).data('href'),{$csrf} success: function(data) { jQuery('#{$this->grid->id}').yiiGridView('update'); afterFunc(th, true, data); }, error: function(XHR) { return afterFunc(th, false, XHR); } }); return false; } EOD; $this->buttons[$id]['clickFunc'] = $funcNam; app()->controller->appendScript($funcNam, $this->buttons[$id]['click']); } }