2013-06-23 6 views
1

При начальной загрузке приложения после очистки кеша я получаю jquery undefined 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(); 
}); 

App .js

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

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

Я проверил firebug html и, похоже, скрипты загружаются в правильном порядке - требуют, main, app, jquery, underscore, backbone, validate, но я все еще получаю jquery, это неопределенная ошибка в плагине проверки. – user1572796

ответ

0

Где вы попадаете? Можете ли вы вставить стек?

Также стоит проверить URL-адрес jquery. Введите свой URL-адрес jquery (заканчивающийся на 'libs/jquery/jquery-min') в ваш браузер и посмотрите, можно ли его найти.

+0

спасибо за ответ, jquery есть и загружает штраф – user1572796

0

exports должен иметь тот же тип корпуса, который ожидается сторонними сценариями. В этом случае: jQuery и Backbone

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

Да, даже дважды проверенный firebug, который загружается последним. Я уверен, что это что-то простое, я пропускаю. – user1572796

0

Свойство exports должно совпадать с именем глобальной собственности - в случае JQuery, он должен быть либо $ или jQuery. Для позвоночника это должно быть Backbone.

Вы также не должны быть shimming jQuery - это было совместимо с AMD по прошествии некоторого времени с помощью имени define. См. https://github.com/jquery/jquery/blob/master/src/exports.js#L15-L17

+0

Спасибо, обновили имена свойств и удалили jquery shim, но все равно не повезло – user1572796

1

jquery validate, как видно из здесь, является плагином, который вызывается $ .validate().

В таких случаях вам не нужно производить экспорт.

Вы можете попробовать и посмотреть, если это полезно для вас:

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

Вы также можете увидеть подобный StackOverflow вопрос для справки: How to make a jQuery plugin loadable with requirejs

-3

Спасибо за ответы, я уверен, что фиксированная ваша обратная связь некоторые другие вопросы, которые у меня были бы. Похоже, я использовал действительно старую версию require.js 0.27.0 и обновление до последней исправленной проблемы jquery.