Zwrócenie data.record

0

Witajcie, mam taki problem. Posiadam funkcję, która po kliknięciu ładuje mi stronę z edycja. Jednak nie mogę dobrać się do ID rzedu. Funkcja wygląda tak jak poniżej

 recordsLoaded: function (event, data) {
                $('.jtable-data-row').click(function () {
                    var row_id = data.record.UserId 
                    @*document.location.href = '@Html.Raw(@Url.Action("EditUser", "User"))' + '/' + row_id;*@
                    alert("test called: " + row_id);
                });
            } 

data.record.UserId ma na 100% wartość, bo wyżej zwracałem ją funkcją do kolumny. Tutaj jednak coś jest nie tak i gdy ustawiam var row_id = data.record.UserId to funkcja przestaje mi reagować na kliknięcie... ktoś ma jakieś sugestie? Próbowałem zwrócić to w formie funkcji ale jest dokładnie tak samo - pusty return

  var row_id = (function(data) {
                        return data.record.UserId;
                    })();  
0

Daj w funkcji obsługującej kliknięcie console.log(data); i w konsoli (odpowiednia zakłada pod F12 albo Shift+F5) podejrzyj co przyszło.

Poza tym: dodawanie listenera na kliknięcie ZA KAŻDYM RAZEM, kiedy robisz ajax, to błąd programistyczny. Po pierwszym requeście wszystko zadziała, po drugim pojawią się kwiatki, między innymi takie, jak ten który masz teraz. Odróżniasz kliknięcie od nasłuchiwania na kliknięcie, a to od ustawienia nasłuchu na to kliknięcie? Nasłuch ustawia się RAZ.

Poza tym: var row_id = (function(data) { return data.record.UserId; })(); oznacza przypisanie do zmiennej row_id wyniku wywołania funkcji anonimowej wymagającej parametru data, a nie mającej tego parametru. Nie rozumiesz co robisz, nie rozumiesz zasięgu zmiennych i argumentów, nie odróżniasz definicji funkcji od jej wywołania i strzelasz po omacku, prawda? Rozpiszę Ci inaczej to, co zrobiłeś:

to robisz:

var anonymousFunction = function(data) { return data.record.UserId; };
var resultOfAnonymousFunction = anonymousFunction(); // look ma', no args but one is required
var row_id = resultOfAnonymousFunction;

to się dzieje:
function(data) { return data.record.UserId; } wołane bez argumentu ==> data === undefined ==> return undefined.record.UserId ==> zmienna data o wartości undefined nie zawiera pola record ==> leci związany z tym wyjątek

to być może chciałeś zrobić:

var getRowId = function(data) { return data.record.UserId; };
// ...
var records; // zmienna globalna
$('.jtable-data-row').click(function () { /* tu obsługa kliknięcia nałożona RAZ, korzystająca z zawartości records */ var rowId = getRowId(records); alert(rowId); });
// ...
recordsLoaded: function (event, data) { records = data; };
// ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1