Передающие данные к Диалоговому окну UI jQuery

Неустранимая ошибка: использование $ this, если не в контексте объекта

$this - специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.

Эта ошибка может возникнуть:

  1. Если нестатический метод называется статическим , Пример:
    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    
    Как исправить: снова просмотрите свой код, $this может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property для доступа к статическому свойству.
  2. Если код из метода класса был скопирован в нормальную функцию или только глобальную область и , сохраняя специальную функцию $this переменная. Как исправить: Просмотрите код и замените $this на другую переменную замещения.

Вопросы, относящиеся:

  1. Вызов нестатический метод как статический: PHP Неустранимая ошибка: использование $ this, если не в объектном контексте
  2. Копировать код: Неустранимая ошибка: использование $ this, если не в объекте context
  3. Все «Использование $ this, если не в контексте объекта» Вопросы по Stackoverflow

83
задан Rahul Gupta 28 December 2017 в 06:43
поделиться

8 ответов

Вы могли сделать это как это:

  • отмечают <a> с классом, говорят, что "отмена"
  • настроила диалоговое окно путем действия на все элементы с классом = "отмена":

    $('a.cancel').click(function() { 
      var a = this; 
      $('#myDialog').dialog({
        buttons: {
          "Yes": function() {
             window.location = a.href; 
          }
        }
      }); 
      return false;
    });
    

(плюс Ваши другие опции)

ключевые пункты здесь:

  • делают его максимально незаметным
  • , если все, в чем Вы нуждаетесь, является URL, у Вас уже есть он в href.

Однако я рекомендую сделать это POST вместо ТОГО, ЧТОБЫ ПОЛУЧАТЬ, так как действие отмены имеет побочные эффекты, и таким образом не выполняет, ПОЛУЧАЮТ семантику ...

45
ответ дан Mauricio Scheffer 24 November 2019 в 08:40
поделиться

С точки зрения того, что Вы делаете с jQuery, мое понимание - то, что можно объединить функции в цепочку как Вы, имеют, и внутренние имеют доступ к переменным от внешних. Так Ваш ShowDialog (x), функция содержит эти другие функции, можно снова использовать x переменную в них, и это будет взято в качестве ссылки на параметр от внешней функции.

я соглашаюсь с mausch, необходимо действительно посмотреть на использование POST для этих действий, которые добавят <form> тег вокруг каждого элемента, но сделают возможности автоматизированного сценария или инструмента, инициировавшего событие Cancel гораздо менее вероятный. Действие Изменения может остаться, как то, потому что это (по-видимому, просто открывает форму редактирования).

2
ответ дан Falkayn 24 November 2019 в 08:40
поделиться

Я теперь попробовал Ваши предложения и нашел, что это вид работ,

  1. диалоговое отделение является alsways, выписанным в простом тексте
  2. С $ .post, присваивают версию ему, на самом деле работает в терминах, что контроллер называют и на самом деле отменяет заказ, но диалоговое окно остается открытым, и страница не обновляется. С получить версией window.location = h.ref работает отлично.

Se мой "новый" сценарий ниже:

$('a.cancel').click(function() {
        var a = this;               
        $("#dialog").dialog({
            autoOpen: false,
            buttons: {
                "Ja": function() {
                    $.post(a.href);                     
                },
                "Nej": function() { $(this).dialog("close"); }
            },
            modal: true,
            overlay: {
                opacity: 0.5,

            background: "black"
        }
    });
    $("#dialog").dialog('open');
    return false;
});

});

Какие-либо подсказки?

, о, и моя ссылка Действия теперь похож на это:

<%= Html.ActionLink("Cancel", "Cancel", new { id = v.BookingId }, new  { @class = "cancel" })%>
1
ответ дан Frederik 24 November 2019 в 08:40
поделиться

Рассмотрение Вашего кода, что необходимо сделать, добавляет функциональность, чтобы закрыть окно и обновить страницу. В Вашем "Да" функционируют, необходимо записать:

        buttons: {
            "Ja": function() {
                $.post(a.href);
                $(a). // code to remove the table row
                $("#dialog").dialog("close");
            },
            "Nej": function() { $(this).dialog("close"); }
        },

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

1
ответ дан thaBadDawg 24 November 2019 в 08:40
поделиться

Хорошо первый выпуск с тегом Div был достаточно легок: Я просто добавил style="display:none;" к нему и затем прежде, чем показать диалоговое окно, я добавил это в своем диалоговом сценарии:

$("#dialog").css("display", "inherit");

, Но для версии сообщения я являюсь все еще неудачливым.

0
ответ дан Frederik 24 November 2019 в 08:40
поделиться

Просто дайте Вам некоторое представление, может помочь Вам, если Вы хотите полностью диалоговое окно управления, можно стараться избегать использования параметров кнопки по умолчанию и добавить кнопки собой в Вашем #dialog отделении. Также можно поместить данные в некоторый фиктивный атрибут ссылки, как Щелчок. назовите attr ("данные") при необходимости в нем.

0
ответ дан 24 November 2019 в 08:40
поделиться

После НЕСКОЛЬКИХ ЧАСОВ попытки / улова я наконец получил этот рабочий пример, его работа с AJAX POST с новыми строками добавляется в ТАБЛИЦУ на лету (это была моя настоящая проблема):

Магия пришла со ссылкой на это:

<a href="#" onclick="removecompany(this);return false;" id="remove_13">remove</a>
<a href="#" onclick="removecompany(this);return false;" id="remove_14">remove</a>
<a href="#" onclick="removecompany(this);return false;" id="remove_15">remove</a>

Это последняя работа с AJAX POST и Jquery Dialog:

  <script type= "text/javascript">/*<![CDATA[*/
    var $k = jQuery.noConflict();  //this is for NO-CONFLICT with scriptaculous
     function removecompany(link){
        companyid = link.id.replace('remove_', '');
    $k("#removedialog").dialog({
                bgiframe: true,
                resizable: false,
                height:140,
                autoOpen:false,
                modal: true,
                overlay: {
                    backgroundColor: '#000',
                    opacity: 0.5
                },
                buttons: {
                    'Are you sure ?': function() {
                        $k(this).dialog('close');
                        alert(companyid);
                        $k.ajax({
                              type: "post",
                              url: "../ra/removecompany.php",
                              dataType: "json",
                              data: {
                                    'companyid' : companyid
                                    },
                              success: function(data) {
                                    //alert(data);
                                    if(data.success)
                                    {
                                        //alert('success'); 
                                        $k('#companynew'+companyid).remove();
                                    }
                          }
                        }); // End ajax method
                    },
                    Cancel: function() {
                        $k(this).dialog('close');
                    }
                }
            });
            $k("#removedialog").dialog('open'); 
            //return false;
     }
    /*]]>*/</script>
    <div id="removedialog" title="Remove a Company?">
        <p><span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>
        This company will be permanently deleted and cannot be recovered. Are you sure?</p>
    </div>
1
ответ дан 24 November 2019 в 08:40
поделиться

jQuery предоставляет метод, который хранит данные за вас, без необходимости использовать фиктивный атрибут или искать способ решения вашей проблемы.

Свяжите событие щелчка:

$('a[href*=/Booking.aspx/Change]').bind('click', function(e) {
    e.preventDefault();
    $("#dialog-confirm")
        .data('link', this)  // The important part .data() method
        .dialog('open');
});

И ваш диалог:

$("#dialog-confirm").dialog({
    autoOpen: false,
    resizable: false,
    height:200,
    modal: true,
    buttons: {
        Cancel: function() {
            $(this).dialog('close');
        },
        'Delete': function() {
            $(this).dialog('close');
            var path = $(this).data('link').href; // Get the stored result
            $(location).attr('href', path);
        }
    }
});
272
ответ дан 24 November 2019 в 08:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: