2

yii の CJuiDialog に問題があります。「削除」ボタンを「非表示」に設定したいのですが、それは機能せず、ボタンがまだ表示されています。これが私のコードです:

$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
'id' => 'dlg_EventCal',
'options' => array(
    'title' => Yii::t('CalModule.fullCal', 'Event detail'),
    'modal' => true,
    'autoOpen' => false,
    'hide' => 'slide',
    'show' => 'slide',
    'width'=> 400,
    'buttons' => array(
        array(
            'text' => Yii::t('CalModule.fullCal', 'OK'),
            'click' => "js:function() { eventDialogOK(); }"
        ),
        array(
            'text' => Yii::t('CalModule.fullCal', 'Cancel'),
            'click' => 'js:function() { $(this).dialog("close"); }',

        ),  
         array( 
    'text' => Yii::t('CalModule.fullCal', 'Delete'),
    'click' => 'js:function() { eventDialogDelete(); }',
   'visible'=>Yii::app()->user->checkAccess('deleteAllEvents'),

            ),

))));
4

1 に答える 1

1

CJuiDialogjQuery.dialogプラグインにデータを渡すだけです

この関数を見てください(https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.dialog.js#L322から):

_createButtons: function( buttons ) {
    var that = this,
        hasButtons = false;

    // if we already have a button pane, remove it
    this.uiDialogButtonPane.remove();
    this.uiButtonSet.empty();

    if ( typeof buttons === "object" && buttons !== null ) {
        $.each( buttons, function() {
            return !(hasButtons = true);
        });
    }
    if ( hasButtons ) {
        $.each( buttons, function( name, props ) {
            var button, click;
            props = $.isFunction( props ) ?
                { click: props, text: name } :
                props;
            // Default to a non-submitting button
            props = $.extend( { type: "button" }, props );
            // Change the context for the click callback to be the main element
            click = props.click;
            props.click = function() {
                click.apply( that.element[0], arguments );
            };
            button = $( "<button></button>", props )
                .appendTo( that.uiButtonSet );
            if ( $.fn.button ) {
                button.button();
            }
        });
        this.uiDialog.addClass( "ui-dialog-buttons" );
        this.uiDialogButtonPane.appendTo( this.uiDialog );
    } else {
        this.uiDialog.removeClass( "ui-dialog-buttons" );
    }
}

すべてのプロパティがオブジェクトに渡されprops、その後、button 要素のプロパティとして使用されます。

button = $( "<button></button>", props )

したがって、そのようなコードが必要です。

array( 
    'text' => Yii::t('CalModule.fullCal', 'Delete'),
    'click' => 'js:function() { eventDialogDelete(); }',
    'style' => Yii::app()->user->checkAccess('deleteAllEvents') ? '' : 'display: none;',
)

ただし、その場合は、サーバー側の権限をさらに確認する必要があります。

于 2012-11-07T11:04:26.867 に答える