отсутствует: после идентификатора свойства в JQuery.inArray (значение, массив) - PullRequest
0 голосов
/ 23 марта 2011

Я получаю ошибку firebug:

отсутствует: после идентификатора свойства строка ошибки:

if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){ 

Это код оплаты:

Отредактировал пост с обновлением, так как мне было непонятно. Я пытаюсь создать основу для создания диалогов для проекта. В диалоговых окнах может быть четыре предопределенные кнопки. MmDialogButton - моя попытка использовать класс ENUM. Оператор if предназначен для включения кнопок, которые пользователь хотел использовать в диалоговом окне.

Вот еще немного кода для иллюстрации.

mmDialog.js

...

function mmDialog(title, spawnerId, widget, buttons){
...
$dialog.html(widget.getInitialHTML())
        .dialog({
            autoOpen: false,
            title: title + ' <img id="myJquerySpinner" />',
            buttons: {
                if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){
                    Cancel: function() {
                        $( this ).dialog( "close" );
                    },
                }
                if(jQuery.inArray(mmDialogButton.NEXT, buttons)){
                    "Next": function() {
                        widget.doNext();
                    },
                }
                if(jQuery.inArray(mmDialogButton.PREVIOUS, buttons)){
                    "Previous": function() {
                        widget.doPrevious();
                    },
                }
                if(jQuery.inArray(mmDialogButton.OK, buttons)){
                    "Ok": function() {
                        widget.doOk();
                    }
                }
            }...

mmDialogButton.js

function mmDialogButton(){  // Constructor

}

mmDialogButton.CANCEL = function() { return "mmDBCancel"; };
mmDialogButton.OK = function() { return "mmDBOk"; };
mmDialogButton.NEXT = function() { return "mmDBNext"; };
mmDialogButton.PREVIOUS = function() { return "mmDBPrevious"; };

JSP / HTML страница

            var title = "Test Dialog";
            var spawnerId = "myJqueryStarter";

            var mmDialogButtons = new Array();
            mmDialogButtons[0] = mmDialogButton.CANCEL; 
            mmDialogButtons[1] = mmDialogButton.OK; 
            mmDialogButtons[2] = mmDialogButton.NEXT; 
            mmDialogButtons[3] = mmDialogButton.PREVIOUS; 

            myPublishWidget = new mmPublishWidget();
            myDialogPublishWidget = new mmDialogWidget(myPublishWidget);
            myDialog = new mmDialog(title, spawnerId, myDialogPublishWidget , mmDialogButtons);

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Это:

buttons: {
    if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){
      Cancel: function() {
      $( this ).dialog( "close" );
    },

вероятно должно быть:

buttons: (function() {
    if(jQuery.inArray(mmDialogButton.CANCEL, buttons))
      return {
        Cancel: function() {
          $( this ).dialog( "close" );
         }
       };
       return null;
    })()

хотя трудно сказать. То, на что похоже похоже, что вы пытаетесь сделать, - это условно установить свойство «кнопки» для некоторого объекта с помеченным обработчиком (той маленькой функции «закрыть»). Однако код, который вы разместили, является синтаксически бессмысленным. Внесенное мной изменение оборачивает тест inArray в анонимную функцию, которая возвращает объект кнопки только тогда, когда этот тест равен true.

.

Опять же, я просто предполагаю, что это то, что вы пытались сделать.

1 голос
/ 23 марта 2011

Я думаю, что вы хотите выполнить «закрыть», только если ОТМЕНА находится в кнопках, если это так, вы можете написать:

buttons: {
    Cancel: function() {
              if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){
                 $( this ).dialog( "close" );
              }
            },
    ....

РЕДАКТИРОВАТЬ:

вы можете определить кнопкисловарь заранее, как вам нравится, передайте его .dialog(:

dialog_buttons = {}

if(jQuery.inArray(mmDialogButton.CANCEL, buttons)){
 dialog_buttons[Cancel] = function() {
                             $( this ).dialog( "close" );
                          }
}

if(jQuery.inArray(mmDialogButton.NEXT, buttons)){
 dialog_buttons["Next"] = function() {
                             widget.doNext();
                          }
}

if(jQuery.inArray(mmDialogButton.PREVIOUS, buttons)){
 dialog_buttons["Previous"] = function() {
                                 widget.doPrevious();
                              }
}

if(jQuery.inArray(mmDialogButton.OK, buttons)){
 dialog_buttons["Ok"] = function() {
                           widget.doOk();
                        }
}

$dialog.html(widget.getInitialHTML())
        .dialog({
            autoOpen: false,
            title: title + ' <img id="myJquerySpinner" />',
            buttons: dialog_buttons
            }...
...