Странное закрытие - PullRequest
2 голосов
/ 27 июня 2010

По какой-то причине следующий фрагмент кода работает не так, как я ожидал - вероятно, из-за недопонимания с моей стороны относительно того, как он должен вести себя.

var contentPane = widget.children("div.content").first();

var success = function (content) {
    return function (data, successCode, httpRequest) {
        content.innerHTML = data;
    };
}(contentPane); 

Я прикрепилмой отладчик (ну, в любом случае, Firebug), и он выглядит как 'content' в строке content.innerHTML = data; - это объект Window, когда я должен быть результатом var contentPane = widget.children("div.content").first();, верно?

Обратите внимание, что если я установлю точку останова перед функцией, то для contentPane действительно будет установлено то, что я ожидал (объект jQuery, соответствующий div.content).Что здесь происходит, что мне не хватает?

Ответы [ 2 ]

2 голосов
/ 27 июня 2010

Это то, что они добавили $.proxy() для в 1.4 :), например:

var contentPane = widget.children("div.content").first();

var success = $.proxy(function (data, successCode, httpRequest) {
                       this.innerHTML = data;
              }, contentPane);

Это просто делает объявление закрытия для общего случая, как у вас гораздо короче, $.proxy(function, whatThisIs).


Для "что не так?"часть ... ничего, вы уверены, что проверяете правильную переменную?this относится к window внутри вашей функции, но content - это нужный вам объект jQuery ... вы можете увидеть быстрый тест здесь: http://jsfiddle.net/vhcde/

1 голос
/ 27 июня 2010

Возможно, проблема в вашем селекторе. Следующее отлично работает при запуске на этой странице

var contentPane = $("#header")[0];

var success = (function (content) {
    console.info(content);
    return function (data, successCode, httpRequest) {
        console.warn(content);
        content.innerHTML = data;
    };
})(contentPane); 

success("ohai");

* Я добавил скобки вокруг определения функции для большей ясности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...