2013-08-06 2 views
0

간단한 장바구니를 구현하는 도조 모듈을 만들었습니다. 페이지의 장바구니에 대한 dom 노드를 생성하고 표시하는 load() 메서드가 있습니다. 여기에는 카트의 각 항목에 대한 '카트에서 제거'버튼에 클릭 이벤트를 할당하는 쿼리가 포함됩니다. 이 클릭 이벤트가 모듈의 루트 수준에서도 remove() 메서드를 호출하지만 클릭 이벤트를 할당하는 데 필요한 모든 콜백을 전달한 후에 제거 범위에 액세스하는 방법을 알 수 없습니다.() 메소드를 다시 호출하십시오. 다음은 코드 스 니펫입니다.javascript/dojo method scope

define([ "dojo/dom", "dojo/json", "dojo/cookie", "dojo/_base/array", "dojo/query", "dojo/on", "dojo/NodeList-dom" ], 
    function(dom, json, cookie, array, query, on) { 

     return { 
      load : function(config) { 
       var cart = this.get(config); 
       if (cart != null) { 
        var cartDiv = dom.byId(config.cart.domWrapper); 
        // console.log("Shopping Cart: " + cart); 
        cartDiv.innerHTML = "<p>Shopping Cart</p>"; 
        cartDiv.innerHTML += this.getHTML(cart); 
       } 

       query(".remove_item").forEach(function(node, i) { 
        on(query(".remove_item")[i], "click", function(event) { 
         console.log("Removing item " + i + " from cart..."); 
         remove(config, i); //method does not exist at this scope 
        });     
       }); 

      }, 

      remove : function(config, itemId) { 
           //.... 
      }, 

여기서 어떻게 할 수 있습니까?

답변

0

당신이

 load : function(config) { 
      var self = this; 
      //.... 

을 가지는 클래스를 "저장"을 선택한 다음 전화

//....  
on(query(".remove_item")[i], "click", function(event) { 
         console.log("Removing item " + i + " from cart..."); 
         self.remove(config, i); 
//.... 
으로 "제거"할 수 있습니다