относительно объема JQuery в классе - PullRequest
1 голос
/ 25 февраля 2011

Я хочу иметь возможность вызывать информацию ['id'] через ajax ...

var setEditor = function()
{
    this.info = {
        'id' : 1    // <--------------- i want this
    };

    var cardEditor = function()
    {
        var status = {
            'touched' : false,
            'id' : 0
        };
        card.children('input').bind('focusout', function() {
            alert(this.info['id']);  // <----------------- through this
            $.ajax({
                type : 'POST',
                url : '../addcard',
                data : 'name=John&location=Boston',
                dataType : 'json',
                success: function(msg){
                    $('#rec').html(msg);
                }
            });
        });

    };
};

set = new setEditor();

1 Ответ

5 голосов
/ 25 февраля 2011

Проблема в том, что this - это ключевое слово, которое будет ссылаться на разные вещи в разное время. Хитрость заключается в том, чтобы создать новую переменную that, присвоив ей this в то время, когда this равно , ссылаясь на то, что вы хотите. Тогда он будет доступен для вложенных функций через лексическую область видимости. Я обычно делаю это однажды прямо вверху моих функций конструктора.

var setEditor = function()
{
    var that = this;  // that is not a keyword and will always refer this as it is
                      // interpreted at the line of assignment (until that itself is
                      // redefined of course). this will mean something
                      // else when run in an event handler.

    this.info = {
        'id' : 1    // <--------------- i want this
    };

    var cardEditor = function()
    {
        var status = {
            'touched' : false,
            'id' : 0
        };
        card.children('input').bind('focusout', function() {
            alert(that.info['id']);  // now refers to the object and not the input
                                     // element.
            $.ajax({
                type : 'POST',
                url : '../addcard',
                data : 'name=John&location=Boston',
                dataType : 'json',
                success: function(msg){
                    $('#rec').html(msg);
                }
            });
        });

    };
};

set = new setEditor();
...