2011-09-10 145 views
0

在我的JavaScript應用程序中我在頁面加載時出現以下錯誤。Javascript未捕獲TypeError:對象沒有方法

Uncaught TypeError : Object #<Object> has no method 'showHideCleanupButton' 

這似乎(Chrome的調試器內)的方法內部炸燬「getAllItemsForDisplay'where它稱之爲 'this.showHideCleanupButton'

這裏是一個鏈接上的jsfiddle: http://jsfiddle.net/cpeele00/4fVys/

任何幫助,將不勝感激:-)

感謝,

克里斯 -

回答

1

看來,這是相關的代碼:

getAllItemsForDisplay: function() { 
     $.getJSON('services/act_getAllItems/', function(data) { 
      $('#items-list').empty(); 
      $('#items-listTmpl').tmpl(data).appendTo('#items-list'); 

      this.showHideCleanupButton(); 
      BeefyUtils.noSelect(); 
     }); 
    }, 

什麼是你期待this被設置爲getJSON回調裏面?您是否在相關聲明中設置了斷點並查看了this的值?

如果我理解了jQuery文檔正確的,默認情況下this一個的getJSON調用內部將是最初在通過AJAX選項的參考。我認爲這是可能改變this將與ajaxSetup什麼,但我不」看到你已經做到了。

如果你想指thisgetAllItemsForDisplay開始,那麼你需要的是保存到另一個變量,您可以使用這樣的:

getAllItemsForDisplay: function() { 
     var obj = this; 
     $.getJSON('services/act_getAllItems/', function(data) { 
      $('#items-list').empty(); 
      $('#items-listTmpl').tmpl(data).appendTo('#items-list'); 

      obj.showHideCleanupButton(); 
      BeefyUtils.noSelect(); 
     }); 
    }, 
+0

在這種情況下,這將是調用回調(或可能是xhr對象)的jQuery函數的上下文。 – tjameson

+0

@tjameson - ajaxSetup的doc似乎表明'this'將被設置爲指向選項對象,除非在選項對象中設置不同。我沒有可以自己查看的可測試示例,但這是我可以從jQuery文檔中收集的。 – jfriend00

+0

無論如何,這可能不是OP所期望的。 – tjameson

1

要背馱式上jfriend00的回答,變化這樣的:

getAllItemsForDisplay: function() { 
    $.getJSON('services/act_getAllItems/', function(data) { 
     $('#items-list').empty(); 
     $('#items-listTmpl').tmpl(data).appendTo('#items-list'); 

     this.showHideCleanupButton(); 
     BeefyUtils.noSelect(); 
    }); 
}, 

這樣:

getAllItemsForDisplay: function() { 
    var self = this; 
    $.getJSON('services/act_getAllItems/', function(data) { 
     $('#items-list').empty(); 
     $('#items-listTmpl').tmpl(data).appendTo('#items-list'); 

     self.showHideCleanupButton(); 
     BeefyUtils.noSelect(); 
    }); 
}, 

這會給你一個名爲getAllItemsForDisplay的上下文,我認爲它是你想要的。

+0

感謝幫助的人! – cpeele00

相關問題