2013-06-23 3 views
1

캐시를 삭제 한 후 앱의 초기로드에서 jquery가 정의되지 않음을 알게되었습니다. bc는 jquery가로드되기 전에 jquery 유효성 검사를로드하려고합니다. 새로 고침 후 모든 것이로드되어 제대로 작동합니다. 나는 이것을 올바르게 설정했다고 생각했지만 뭔가 빠졌는가? backbone.js, require.js 및 jquery를 사용하십시오.스크립트 로딩 순서 오류 - require.js

Main.js :

require.config({ 
    paths: { 
    'jquery': 'libs/jquery/jquery-min', 
    'underscore': 'libs/underscore/underscore-min', 
    'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
    'templates': '../templates' 
    }, 

shim: { 
    jquery: { 
    exports: "jquery" 
    }, 
    underscore: { 
    exports: '_' 
    }, 
    backbone: { 
    deps: ['underscore', 'jquery'], 
    exports: "backbone" 
    }, 
    validate: { 
    deps: ['jquery'], 
    exports: "validate" 
    } 
}, 

}); 

require([ 
    'app' 

], function(App){ 
    App.initialize(); 
}); 

App.js

다음
define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
var initialize = function(){ 
    Router.initialize(); 
}; 

return { 
    initialize: initialize 
}; 
}); 

난에 파일을 업데이트 한 것입니다,하지만 여전히 운 :

require.config({ 
    paths: { 
'jquery': 'libs/jquery/jquery-min', 
'underscore': 'libs/underscore/underscore-min', 
'backbone': 'libs/backbone/backbone-min', 
    'validate': 'jquery.validate-1.11.1.min', 
'templates': '../templates' 
    }, 

shim: { 
    underscore: { 
    exports: '_' 
    }, 
    backbone: { 
    deps: ['underscore', 'jquery'], 
    exports: "Backbone" 
    }, 
    validate: { 
    deps: ['jquery', 'backbone'], 
    exports: "validate" 
    } 
} 

}); 

require([ 
    'app' 
], function(App){ 
    App.initialize(); 
}); 

앱 .js

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'validate', 
    'router', 
    'scripts' 
], function($, _, Backbone, validate, Router, scripts){ 
    var initialize = function(){ 
Router.initialize(); 
    }; 

return { 
    initialize: initialize 
    }; 
}); 
+0

나는 firebug html을 확인했는데 스크립트가 올바른 순서 (require, main, app, jquery, 밑줄, 백본, 유효성 검사)로로드되어있는 것처럼 보입니다. 그러나 여전히 유효성 검사 플러그인에서 jquery가 정의되지 않은 오류가 발생합니다. – user1572796

답변

0

어디서 오류가 나옵니까? 스택 추적을 붙여 넣을 수 있습니까?

또한 jquery의 URL을 확인할 가치가 있습니다. 브라우저에 jquery URL ('libs/jquery/jquery-min'으로 끝남)을 입력하고 찾을 수 있는지 확인하십시오.

+0

답장을 보내 주셔서 감사합니다. jquery가 있습니다. 답글을 보내 주셔서 감사합니다. – user1572796

0

exports은 타사 스크립트에서 예상되는 것과 동일한 유형이어야합니다. 이 경우 : jQueryBackboneexports 속성은 전역 속성 이름과 일치 할 필요가

require.config({ 
    paths: { 
     'jquery': 'libs/jquery/jquery-min', 
     'underscore': 'libs/underscore/underscore-min', 
     'backbone': 'libs/backbone/backbone-min', 
     'validate': 'jquery.validate-1.11.1.min', 
     'templates': '../templates' 
    }, 
    shim: { 
     jquery: { 
      exports: "jQuery" 
     }, 
      underscore: { 
      exports: '_' 
     }, 
     backbone: { 
      deps: ['underscore', 'jquery'], 
      exports: "Backbone" 
     }, 
     validate: { 
      deps: ['jquery'], 
      exports: "validate" 
     } 
    }, 
}); 
+0

감사합니다. 내보내기를 변경했는데 아무런 영향이없는 것 같습니다. – user1572796

+0

브라우저 캐시를 삭제 했습니까? – orange

+0

그래, 심지어 최근에로드되는 방화범이 두 번 확인해. 내가 간과하고 있는게 분명해. – user1572796

0

- jQuery를의 경우, 그것은 $ 또는 jQuery이 될 필요가있다. 백본의 경우 Backbone이어야합니다.

또한 jQuery를 shimming하지 않아도됩니다. 명명 된 정의를 통해 AMD 호환이 상당히 오래되었습니다. https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17

+0

감사합니다. 속성 이름을 업데이트하고 jquery shim을 제거했지만 여전히 운이 없습니다. – user1572796

1

여기에서 볼 수 있듯이 jquery validate는 $ .validate()에 의해 호출되는 플러그인입니다.

그런 경우에는 내보낼 필요가 없습니다.

당신은 시도하고이 당신을 위해 도움이되는 경우가 나타날 수 있습니다

shim: { 
     validate: { 
      deps: ['jquery'] 
     } 
    } 

당신은 또한 참조 유사한 유래 질문 볼 수 있습니다 회신에 대한 How to make a jQuery plugin loadable with requirejs

-3

감사합니다, 나는 당신의 의견은 고정 확신 내가 가지고 있었을 다른 몇 가지 이슈들. 내가 require.js 0.27.0의 정말로 오래된 버전을 사용하고 있었고 최신 jquery 문제가 수정 된 것 같습니다.