2011-08-21 74 views
0

我有這樣的javascript代碼:使用jQuery擴展的對象,對象有沒有方法錯誤

var TodoController = { 

    init: function() { 

    $(this).find('input.todo_check').click(function(){ 
     $(this).parents('li.todo').done(); 
    }); 

    }  
} 

var Todo = { 
    done: function() { 
    $(this).toggleClass('done'); 
    } 
} 

$(document).ready(function() { 

    $("li.todo").extend(Todo); 
    $("#todo_list").extend(TodoController).init(); 

}); 

當我點擊了「input.todo_check」我希望有()函數,在「li.todo」,被執行。但我得到:

=>遺漏的類型錯誤:對象的翻譯:有沒有「做」的方法

我做錯了嗎?

這種說法應該加上 '做()' 函數 「li.todo」 元素?:

$("li.todo").extend(Todo); 

感謝。 JM

回答

1

每當您撥打$(x)(對於任何x),您都會收到一個全新的對象。所以這兩條語句:

var $x1 = $("li.todo"); 
var $x2 = $(this).parents('li.todo'); 

產生兩個完全不同的對象。所以,如果你這樣做:

var $x1  = $('li.todo'); 
$x1.where_is = 'pancakes house?'; 

再後來做到這一點:

var $x2 = $(this).parents('li.todo'); 

然後$x2不會有where_is財產即使兩個$x1$x2決心同一套DOM對象。

另外,$.extend不符合您的想法。調用extend將對象合併到第一個對象中。所以說:

$(x).extend(Todo); 

只是返回Todo不做改變而:

$(x).extend(Todo, { where_is: 'pancakes house?' }); 

添加一個where_is屬性Todo並返回修改後的Todo。這就是爲什麼你通常會看到像這樣使用extend

options = $.extend({ }, defaults, options); 
+0

這裏是一個工作示例https://gist.github.com/jmrepetti/ed6ed6065b59a0b016dc。坦克爲你提供幫助。 –

相關問題