2013-01-17 32 views
5

Tôi đang sử dụng các ký tự đại diện để tải các tệp javascript và css của mình và nó hoạt động tốt, nhưng đó là một nỗi đau khi làm việc với các tệp javascript tổng hợp trong giai đoạn phát triển. Có cách nào để có wro4j không tổng hợp các tập tin, nhưng chỉ cần bao gồm chúng riêng lẻ?wro4j - Làm cách nào để tắt tính năng tổng hợp trong chế độ gỡ lỗi?

My wro.xml file

<groups xmlns="http://www.isdc.ro/wro"> 
<group name="external"> 
    <js>/app/lib/*.js</js> 
</group> 

<group name="application"> 
    <js>/js/*.js</js> 
    <css>/css/normalize.css</css> 
    <css>/css/*.css</css> 
</group> 
</groups> 

Cảm ơn!

Trả lời

4

Có một mẹo để đạt được điều đó trong chế độ phát triển (debug=true). Có một điểm cuối (/wro/wroAPI/model - điều này là hợp lệ nếu bạn đang lập bản đồ WroFilter đến /wro/*) trả về biểu diễn JSON của mô hình. Sử dụng JSON này, bạn có thể dễ dàng chèn các tập lệnh và/hoặc liên kết css cho một nhóm nhất định bằng cách lặp lại các mục nhập nhóm. Không có tiện ích nào được cung cấp theo mặc định, nhưng nếu bạn tạo một tiện ích và muốn đóng góp nó - bạn được chào đón :).

2

Cảm ơn bạn đã nhập, Alex.

Tôi đã tạo một ServletFilter sử dụng thông tin bạn đã cung cấp ở trên. Tôi đăng nó ở đây cho hậu thế. Lưu ý: đây không phải là mã lý tưởng (lưu trữ quá nhiều, ví dụ), nó chỉ ở đây để cung cấp cho mọi người ý tưởng về việc triển khai sẽ như thế nào. Việc triển khai của tôi sử dụng số DelegatingFilterProxy của Spring để cho biết mã mà các nhóm lo lắng. Theo như nó đi với việc tạo ra một plugin, bạn có thể chỉ cho tôi cách để một số tài liệu hướng dẫn để thực hiện, tôi là mơ hồ về phần đó?

public class WroDebugFilter implements Filter 
{ 
    //http loader is shamelessly stolen from another project. 
    SimpleHttpLoader httpLoader = new SimpleHttpLoader(); 

    private List<String> jscriptFiles; 
    private List<String> debugGroups; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     request.setAttribute("jscriptFiles",getJavaScriptFiles((HttpServletRequest) request)); 

     chain.doFilter(request,response); 
    } 

    private List<String> getJavaScriptFiles(HttpServletRequest request) { 

     if (jscriptFiles == null) { 

      List<String> cssFiles = new ArrayList<String>(); 
      List<String> jsFiles = new ArrayList<String>(); 

      JsonParser jsonParser = new JsonParser(); 

      String url = httpLoader.httpGet(getApiUrl(request)); 

      JsonObject data = jsonParser.parse(url).getAsJsonObject(); 
      JsonArray groups = data.getAsJsonArray("groups"); 

      for (JsonElement group : groups) { 

       JsonObject groupObject = group.getAsJsonObject(); 

       String groupName = groupObject.get("name").getAsString(); 

       if (debugGroups.contains(groupName)) { 

        JsonArray resources = groupObject.getAsJsonArray("resources"); 

        for (JsonElement resource : resources) { 
         JsonObject resourceObject = resource.getAsJsonObject(); 
         String uri = resourceObject.get("uri").getAsString(); 

         if (uri.contains(".css")) { 
          cssFiles.add("\t<link rel=\"stylesheet\" href=\"" + request.getContextPath() + uri +"\">"); 
         } 
         else { 
          jsFiles.add("<script type=\"text/javascript\" src=\"" + request.getContextPath() + uri + "\"></script>"); 
         } 
        } 
       } 

      } 
      cssFiles.addAll(jsFiles); 
      jscriptFiles = cssFiles; 
     } 

     return jscriptFiles; 
    } 

    private String getApiUrl(HttpServletRequest request) { 

     String serverName = request.getServerName(); 
     String contextPath = request.getContextPath(); 
     int port = request.getServerPort(); 

     return String.format("http://%s:%s%s/%s",serverName,port,contextPath,"wro/wroAPI/model"); 
    } 

    @Override 
    public void destroy() { 
     //To change body of implemented methods use File | Settings | File Templates. 
    } 

    public List<String> getDebugGroups() { 
     return debugGroups; 
    } 

    public void setDebugGroups(List<String> debugGroups) { 
     this.debugGroups = debugGroups; 
    } 
} 

Các wro.xml tập tin

<groups xmlns="http://www.isdc.ro/wro"> 
    <group name="external"> 
     <js>/app/lib/*.js</js> 
    </group> 

    <group name="application"> 
     <js>/js/*.js</js> 
     <css>/css/normalize.css</css> 
     <css>/css/*.css</css> 
    </group> 
</groups> 

và ....

Configuration Xuân

<bean id="wroDebugFilter" class="gov.mystate.dhw.idalink.web.filter.WroDebugFilter"> 
     <property name="debugGroups"> 
       <list> 
        <value>application</value> 
       </list> 
      </property> 
    </bean> 
Các vấn đề liên quan