$this
- специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.
Эта ошибка может возникнуть:
class Foo {
protected $var;
public function __construct($var) {
$this->var = $var;
}
public static function bar () {
// ^^^^^^
echo $this->var;
// ^^^^^
}
}
Foo::bar();
Как исправить: снова просмотрите свой код, $this
может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property
для доступа к статическому свойству. $this
переменная. Как исправить: Просмотрите код и замените $this
на другую переменную замещения. Вопросы, относящиеся:
Вы могли сделать это как это:
<a>
с классом, говорят, что "отмена" настроила диалоговое окно путем действия на все элементы с классом = "отмена":
$('a.cancel').click(function() {
var a = this;
$('#myDialog').dialog({
buttons: {
"Yes": function() {
window.location = a.href;
}
}
});
return false;
});
(плюс Ваши другие опции)
ключевые пункты здесь:
Однако я рекомендую сделать это POST вместо ТОГО, ЧТОБЫ ПОЛУЧАТЬ, так как действие отмены имеет побочные эффекты, и таким образом не выполняет, ПОЛУЧАЮТ семантику ...
С точки зрения того, что Вы делаете с jQuery, мое понимание - то, что можно объединить функции в цепочку как Вы, имеют, и внутренние имеют доступ к переменным от внешних. Так Ваш ShowDialog (x), функция содержит эти другие функции, можно снова использовать x переменную в них, и это будет взято в качестве ссылки на параметр от внешней функции.
я соглашаюсь с mausch, необходимо действительно посмотреть на использование POST для этих действий, которые добавят <form>
тег вокруг каждого элемента, но сделают возможности автоматизированного сценария или инструмента, инициировавшего событие Cancel гораздо менее вероятный. Действие Изменения может остаться, как то, потому что это (по-видимому, просто открывает форму редактирования).
Я теперь попробовал Ваши предложения и нашел, что это вид работ,
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" })%>
Рассмотрение Вашего кода, что необходимо сделать, добавляет функциональность, чтобы закрыть окно и обновить страницу. В Вашем "Да" функционируют, необходимо записать:
buttons: {
"Ja": function() {
$.post(a.href);
$(a). // code to remove the table row
$("#dialog").dialog("close");
},
"Nej": function() { $(this).dialog("close"); }
},
код для удаления строки таблицы не является забавой записать, таким образом, я позволю Вам иметь дело с вшивыми песчаными деталями, но в основном, необходимо сказать диалоговое окно, что сделать после регистрации его. Это может быть умное диалоговое окно, но этому нужно некоторое направление.
Хорошо первый выпуск с тегом Div был достаточно легок: Я просто добавил style="display:none;"
к нему и затем прежде, чем показать диалоговое окно, я добавил это в своем диалоговом сценарии:
$("#dialog").css("display", "inherit");
, Но для версии сообщения я являюсь все еще неудачливым.
Просто дайте Вам некоторое представление, может помочь Вам, если Вы хотите полностью диалоговое окно управления, можно стараться избегать использования параметров кнопки по умолчанию и добавить кнопки собой в Вашем #dialog отделении. Также можно поместить данные в некоторый фиктивный атрибут ссылки, как Щелчок. назовите attr ("данные") при необходимости в нем.
После НЕСКОЛЬКИХ ЧАСОВ попытки / улова я наконец получил этот рабочий пример, его работа с 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>
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);
}
}
});