2011-08-21 3 views
0

나는이 자바 스크립트 코드가 없습니다 :확장 개체, 개체있는 방법 오류

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'에, 완료() 함수를 예상 클릭하면을, 실행될 그러나 나는 얻을 :

=> catch되지 않은 형식 오류 : 개체 [개체 개체] '완료'있는 방법이 없습니다

는 내가 뭘 어떻게 잘못?

이 문장은 '다()'기능을 "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이 경우에도 모두 $x1$x2 해결 DOM 객체의 동일한 세트에 where_is 속성이되지 않습니다.

또한 $.extend은 생각대로 행동하지 않습니다. extend을 호출하면 첫 번째 개체에 개체가 병합됩니다. 따라서 말해서 :

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

Todowhere_is 속성을 추가하고 수정 Todo를 반환

$(x).extend(Todo); 

단순히 반면 아무 것도 변경하지 않고 Todo를 반환합니다.

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

는 작업 예를 https://gist.github.com/jmrepetti/ed6ed6065b59a0b016dc입니다 : 당신은 일반적으로 extend은 다음과 같이 사용 참조 이유입니다. 너의 도움을위한 탱크. –