Как я могу сделать огонь предупреждения при каждом изменении, кроме первоначально?
blockquote>Нокаут будет вызывать обратный вызов обновления первоначально, когда привязка применяется к элемент и отслеживать любые зависимости (наблюдаемые / вычисленные), к которым вы обращаетесь. Когда какая-либо из этих зависимостей изменится, обратный вызов обновления будет вызван еще раз.
Я не думаю, что можно запустить только изменения, а не изначально.
Вы можете создайте обходное решение, соответствующее вашему сценарию, добавив событие изменения, связанное с вашим элементом внутри init.
init: function(element, valueAccessor) { // element should be the element you want to attach change event. $(element).on('change', function (value) { // do your stuff. }); }
В Delphi существует интегрированная функция помощника: SysErrorMessage
. Это - по существу обертка к FormatMessage
, но намного более простой использовать в Вашем случае. Просто обеспечьте код ошибки, для которого Вы нуждаетесь в текстовом описании.
, Например, можно использовать это для отображения последней ошибки:
ShowMessage(SysErrorMessage(GetLastError))
, Если Вы хотите повысить исключение с этим сообщением, это еще более просто:
RaiseLastOSError;
Важный : Удостоверьтесь, что нет никакого дополнительного вызова API между провальной функцией и Вашим вызовом GetLastError
, иначе последняя ошибка будет сброшена.
Хотя DR верен, есть проблема с этим подходом: он не позволяет вам указать контекст, в котором произошла ошибка. Когда-либо видел ошибку "Ошибка API-функции". без какой-либо мудрости, какая это была функция и где это произошло?
Вот почему я написал функции RaiseLastOsErrorEx и Win32CheckEx:
procedure RaiseLastOsErrorEx(const _Format: string);
begin
RaiseLastOsErrorEx(GetLastError, _Format);
end;
procedure RaiseLastOsErrorEx(_ErrorCode: integer; _Format: string); overload;
var
Error: EOSError;
begin
if _ErrorCode <> ERROR_SUCCESS then
Error := EOSError.CreateFmt(_Format, [_ErrorCode, SysErrorMessage(_ErrorCode)])
else
Error := EOsError.CreateFmt(_Format, [_ErrorCode, _('unknown OS error')]);
Error.ErrorCode := _ErrorCode;
raise Error;
end;
function GetLastOsError(out _Error: string; const _Format: string = ''): DWORD;
begin
Result := GetLastOsError(GetLastError, _Error, _Format);
end;
function GetLastOsError(_ErrCode: integer; out _Error: string; const _Format: string = ''): DWORD;
var
s: string;
begin
Result := _ErrCode;
if Result <> ERROR_SUCCESS then
s := SysErrorMessage(Result)
else
s := _('unknown OS error');
if _Format <> '' then
try
_Error := Format(_Format, [Result, s])
except
_Error := s;
end else
_Error := s;
end;
function Win32CheckEx(_RetVal: BOOL; out _ErrorCode: DWORD; out _Error: string;
const _Format: string = ''): BOOL;
begin
Result := _RetVal;
if not Result then
_ErrorCode := GetLastOsError(_Error, _Format);
end;
(они являются частью модуля u_dzMiscUtils моей доступной библиотеки dzLib). здесь: https://sourceforge.net/p/dzlib/code/HEAD/tree/dzlib/trunk/src/u_dzOsUtils.pas