2013-03-09 6 views
1

Я получаю:ко неопределен

Uncaught TypeError: Cannot call method 'applyBindings' of undefined

Я посмотрела на вкладке Сети в хром, и я вижу, что загружен knockout.js. Я могу набрать window.ko на вкладке Консоль и посмотреть код нокаута

Итак, почему ошибка?

config.js:

var require = { 
    baseUrl: "/scripts" 
}; 

main.js:

require([ 
    "lib/knockout" 
], 
function (ko) { 
    ko.applyBindings(); 
}); 

index.html:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="scripts/config.js"></script> 
    <script data-main="app/main.js" src="scripts/lib/require.js"></script>  
</head> 
<body> 
    <input type="text" data-bind="value: test" /> 
</body> 
</html> 
+0

поддержка AMD/RequireJS KNOCKOUT зависит от состояния [ ', если (TypeOf определить 'функцию' === && определить [ 'AMD'])'] (https://github.com/SteveSanderson/knockout /blob/master/build/fragments/amd-pre.js). Если это и предыдущий тест для времени выполнения CommonJS не пройдут, по умолчанию будет задано глобальное 'window.ko'. –

ответ

1

Попробуйте удалить ko параметры из вашего обратного вызова подписи.

+0

, который работает ... но почему? –

+0

Вы используете 'ko', переданный обратному вызову вместо предполагаемого' window.ko' – andri

+0

да, но я часто вижу, как это делается с require() и define(), они соответствуют порядку в определении с порядком в обратном вызове? –

2

Вы должны найти конфигурацию прокладки в requirejs и экспортировать символ ko.

+0

да, может быть, это правильный способ, так +1 –

Смежные вопросы