2013-09-02 3 views
1

Я пытаюсь использовать Kendo с requirejs и частным jquery.Kendo + RequireJS + частный jquery не работает

Закрытый коннектор jquery задокументирован here, Kendo с требованием использования here.

Мой requirejs конфигурации:

require.config({ 
    paths: { 
     "jquery": "js/jquery-2.0.3.min.js", 
     "k": "js/kendo/2013.2.716" 
    }, 
    map: { 
     "*": { 
      "jquery": "jquery-private", 
     }, 
     "jquery-private": { "jquery": "jquery" }, 
    } 
}); 
define("jquery-private", ["jquery"], function (jq) { 
    return jq.noConflict(true); 
}); 

Тогда, когда я require(["jquery", "k/kendo.dropdown.min"], function(){...}), у меня есть ошибки.

Я швы, что Kendo не может работать с приватным jquery. Есть ли способ заставить его работать с приватным jquery? Нужна ли только какая-то конфигурация прокладки?

Спасибо.

+0

Какое сообщение об ошибке вы получаете? Если это проблема, связанная с require.js, ошибки обычно сопровождаются довольно полезной ссылкой, указывающей на возможное решение. – m90

+0

Ошибка: «Невозможно получить свойство« продлить »неопределенной или нулевой ссылки в файле kendo.core.min.js. – Dede

+0

Действительно ли вы передаете зависимости вашей функции? Как 'require ([" jquery "," k/kendo.dropdown.min "], function ($, kendodropdown) {...})' – m90

ответ

-1

Это чистое предположение, так как я даже не знаю, что кендо вещь, но я полагаю, ваши проблемы возникают из этих вопросов:

//This require statement is not correct. 
require(["jquery", "k/kendo.dropdown.min"], function(){...}) 

Вы не являются обязательными Jquery к любым переменным, так что если вы позже попробовать для его использования он не существует. Скорее всего, вы захотите чего-то подобного.

require(["jquery", "k/kendo.dropdown.min"], function($){ 

Другая проблема заключается в том, что плагин kendo, скорее всего, предполагает глобальный jQuery. Это означает, что вы должны убедиться, что плагин правильно объявляет и связывает его зависимые локальные переменные. Код плагина должен быть обернут в нечто вроде этого:

define([ 
    'jquery', 
    ], 
    function (jQuery) { 
    //In case it also depends on the $ then set it up here too: 
    var $ = jQuery; 
    /* The actual kendo plugin stuff...*/ 
    } 
); 

Это потому что вызов noConflict означает глобальный $ и Jquery переменных получить несвязанные. Там вам нужно явно указать локальные переменные, которые вы хотите связать с jQuery, или они не будут работать. Большинство плагинов ожидают, что переменная jQuery будет определена, но она может также принять $.

P.S. Даже если плагин включен AMD и имеет в нем предложение define, возможно, что плагин нуждается в некоторых модификациях для работы с приватным jQuery. Кажется, что некоторые плагины не используют локальные переменные, к которым привязаны зависимости, и передаются плагинам в объявлении определения. Вместо этого они используют то, что оно есть, или не являются общедоступными (например, позвоночник). Таким образом, они используют предложение define так же, как способ указать, что такое зависимости, и убедиться, что requriejs загружает некоторую форму jQuery, но на самом деле они не используют их. Это, однако, не относится к jQuery.