2010-06-27 139 views
2

出於某種原因,下面的代碼不像我預期的那樣行事 - 可能是由於我的端對它應該如何表現的誤解。奇怪的關閉行爲

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

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

我已經附上了我的調試器(好了,反正螢火蟲),它看起來像上線content.innerHTML = data;「內容」是Window對象,當時我應該是var contentPane = widget.children("div.content").first();結果,是否正確?

請注意,如果我在函數前設置了斷點,contentPane的確設置爲我所期望的(匹配div.content的jQuery對象)。這裏發生了什麼,我錯過了什麼?

回答

2

這是他們在1.4 :)添加$.proxy()的,就像這樣:

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

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

這只是使封閉聲明對於通常的情況一樣,你必須要短得多,$.proxy(function, whatThisIs)


對於「什麼是錯的?」部分......沒什麼,你確定你正在檢查正確的變量嗎? thiswindow你的函數裏面,但content是你想要的jQuery對象......你可以看到一個快速測試此:http://jsfiddle.net/vhcde/

+0

@downvoter - 它有助於說*什麼*不正確,所以它實際上可以幫助某人。 – 2010-06-27 20:03:38

1

問題可能會是你的選擇。在此頁面上運行時,以下工作正常

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"); 

*我在函數定義的周圍添加了括號以增加清晰度。

+0

那麼最後的結果是什麼? – 2010-06-28 05:29:23