2

나는 이런 종류의 물건에 익숙하지 않아서 디자인 제안을하고 싶습니다. 의 내가이자바 스크립트 아약스 지연로드 및 기능 구성

$(function() { 
    $('#menuBtn').on('click', app.openUsersMenu); 
}); 
var app = { 
    users: null, 
    openUsersMenu: function() { 
     if (app.users != null) { 
      //render menu 
     } else { 
      $.ajax({ 
       url: '/getUsers.json' 
      }).success(function (data) { 
       app.users = data; 
       //render menu  
      }); 
     } 
    } 
} 

같은이 게으른 로딩 및 캐싱을하는 좋은 방법이 있거나 더 나은 대안을 제안한다고 가정 해 봅시다? 렌더링 기능을 두 번 쓰는 것을 피할 수있는 일반적인 솔루션은 무엇입니까? 물론 당신은 같은 것을 할 수 :

var app = { 
    users: null, 
    openUsersMenu: function() { 
     if (app.users != null) { 
      //render menu 
     } else { 
      $.ajax({ 
       url: '/getUsers.json' 
      }).success(function (data) { 
       app.users = data; 
       app.openUsersMenu(); // Call itself, now with data  
      }); 
     } 
    } 
} 

마지막 패턴은 좋은 생각이다 :

var app = { 
    users: null, 
    openUsersMenu: function() { 
     if (app.users != null) { 
      app.renderMenu(); 
     } else { 
      $.ajax({ 
       url: '/getUsers.json' 
      }).success(function (data) { 
       app.users = data; 
       app.renderMenu(); 
      }); 
     } 
    }, 
    renderMenu: function() { 
     //use app.users to render 
    } 
} 

그러나 두 기능과 자신의 이름이 오히려 혼동 될 그렇게 뭔가를 할 더 좋을 수 있을까? 이 일을하는 일반적인 방법은 무엇입니까?

+1

가운데 하나를 사용하십시오. 이해하기 쉽습니다. –

답변

2

캐싱에 사용할 수있는 다양한 라이브러리에 대한 제안을 많이 얻게 될 것이며 (예 : amplifyJS) 그 위치가 있습니다. 하지만 수행중인 모든 작업이 메모리에 캐시되어 있다면 솔루션은 완벽하게 정상적으로 작동합니다. 커버 아래에서, 그것은 라이브러리가 메모리 내 캐싱을 위해 어쨌든 수행 할 것입니다. 조금만 추상화되었습니다.

하지만, 당신이 가지고있는 것은 간단하고 이해하기 쉽습니다.

코드로드/캐싱에 대한 다른 옵션에 대해 설명합니다. renderMenu 직접 호출 할 적이없는 경우, 나는 그것이 비공개로 openUsersMenu의 내부로 이동합니다 :

var app = { 
    users: null, 
    openUsersMenu: function() { 
     var renderMenu = function() { 
      //use app.users to render 
     }; 

     if (app.users != null) { 
      renderMenu(); 
     } else { 
      $.ajax({ 
       url: '/getUsers/json' 
      }).success(function (data) { 
       app.users = data; 
       renderMenu(); 
      }); 
     } 
    } 
} 

그렇지 않으면, 옵션 # 2 복숭아입니다. Lee Meador는 맞습니다. 옵션 # 3은 시원하지만 조금 읽기가 어렵습니다. 더 자세한 설명이 필요하면 알려주십시오.