2013-07-03 5 views
0

Должен признать (как видно из предыдущего вопроса) Я относительно новичок в JQuery. Я знаю немного Java, но мои знания в основном лежат в CSS и HTML4/5. Я работаю над проектом, где мне нужно создавать, перемещать и удалять маркеры на карте. Вместо того, чтобы использовать google-карту api, я пошел вперед и сделал ее свободной формой, чтобы любой план мог работать теоретически. Однако проблема, с которой я столкнулась до сих пор, - мой друг предоставил мне код после того, как он закончил свой проект ... Я не совсем понимаю некоторые вещи, которые вижу, и я бы спросил его нормально, но он в круизе (он буквально оставил свой мобильный телефон дома, так что его никто не потревожил).Функция Jquery неправильно создает новые маркеры


Я не знаю, как вставлять комментарии здесь (пробовал */и // без кубиков), так что голый со мной здесь. В строке 9 я не понимаю эту функцию grabber, она захватывает страницы html или функцию, расположенную на странице? Если это захватывает данные со страницы, значит ли это, что мне нужно будет воссоздать функцию? Основная проблема заключается в том, что когда я нажимаю кнопку маркера, чтобы создать новую, в которую он блокирует мой курсор, но не позволяет мне разместить маркер (например, событие не называется правильным).

Кроме того, бит json внизу ... Я думал, что json - это язык, на котором он есть (независимый)?


function newIssue(e) 
    { 
    var pos = $('#plan').offset(); 
    var x = e.pageX - pos.left; 
    var y = e.pageY - pos.top; 
    var u = x/$('#plan').width(); 
    var v = y/$('#plan').height(); 

$.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data) 
    { 
     var x = eval(data); 
     var num = x.number; 
     Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true}); 
     var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10); 
     reclusterOnAddition(n); 
     if (e.data.kind == 'Repairable') 
      openIssue(num, true); 

     $('#plan-wrapper').css('cursor', 'move'); 
     $('#plan').unbind('mousedown'); 
     $("div[id^='m']").show(); 
     panner.enable(); 
    }, 'json'); 
    } 

  • Repairable
  • Я получил паблисити для делать это таким образом, но мои друзья код работал хорошо, и я могу лучше понять это так. В основном вы нажимаете на ссылку, и это делает ее там, где ваш курсор при нажатии снова создает маркер, однако он позволяет курсор, но когда вы нажимаете снова, ничего не создается, просто застревает в цикле «создания» без создания.

    +0

    Покажите еще более подходящий код, например, как вы называете функцию 'newIssue', и что вы ожидаете. – Jamiec

    +0

    Перечислил звонок выше @Jamiec –

    ответ

    0

    Прежде всего Javascript: Java :: Carpet: Car.

    Javascript is не Java. На самом деле, отсюда, я буду называть это своим официальным названием ECMAScript.

    Здесь вы задали несколько вопросов, но вы начинаете с того, что не понимаете, что делает код в строке 9.

    В ECMAScript вы можете передать функцию в качестве параметра другой функции.

    $.get идет и получает данные с сервера. Аргумент function(data) { ... } сообщает ECMAScript, что делать, когда данные извлекаются. Имейте в виду, что другой код в этом блоке продолжит выполнение, а функция, переданная как параметр, не будет выполняться до тех пор, пока код вызова не будет выполнен. (Google: цикл событий javascript).

    И, наконец, строка 'json' после замыкания и запятая является еще одним аргументом функции $.get. Он сообщает $.получить данные, с которыми он имеет дело, чтобы он мог обрабатываться соответствующим образом.

    $.get('/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/', function(data) 
        { 
         var x = eval(data); 
         var num = x.number; 
         Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true}); 
         var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10); 
         reclusterOnAddition(n); 
         if (e.data.kind == 'Repairable') 
          openIssue(num, true); 
    
         $('#plan-wrapper').css('cursor', 'move'); 
         $('#plan').unbind('mousedown'); 
         $("div[id^='m']").show(); 
         panner.enable(); 
        }, 'json'); 
    

    Что касается вашего вопроса о том, что JSON является совершенно другим языком, это неверно. JSON - это аббревиатура «Обозначение объекта JavaScript». Это способ представления данных в виде кода Javascript (ECMAScript). Это строго подмножество языка ECMAScript.

    Вот пример некоторых JSON, представляющей информацию об автомобиле:

    { 
        Year: 2013, 
        Make: "Acura", 
        Model: "TL", 
        IsInService: true 
        Drivers: [{ 
         FName: "Bob", 
         LName: "Smith" 
        }, { 
         FName: "Sue", 
         LName: "Smith" 
        }] 
    } 
    

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

    function newIssue(e) 
        { 
        var pos = $('#plan').offset(); 
        var x = e.pageX - pos.left; 
        var y = e.pageY - pos.top; 
        var u = x/$('#plan').width(); 
        var v = y/$('#plan').height(); 
    
        var ajaxTarget = '/new/newIssue/14/' + u + '/' + v + '/' + e.data.kind + '/'; 
    
        var callbackFunction = function(data) 
        { 
         var x = eval(data); 
         var num = x.number; 
         Issue.push({id: num, u: u, v: v, repaired: false, kind: e.data.kind, timestamp: x.timestamp, detailed: true}); 
         var n = insertIntoCluster(Issue[Issue.length - 1], Cluster, 10); 
         reclusterOnAddition(n); 
         if (e.data.kind == 'Repairable') 
          openIssue(num, true); 
    
         $('#plan-wrapper').css('cursor', 'move'); 
         $('#plan').unbind('mousedown'); 
         $("div[id^='m']").show(); 
         panner.enable(); 
        }; 
    
        // Call $.get with three parameters, 
        // ajaxTarget: tells $.get where to get data from. 
        // callbackFunction: tells $.get what to do with the data. 
        // 'json': tells $.get that we are getting json data. 
        $.get(ajaxTarget, callbackFunction, 'json'); 
        } 
    
    +0

    Длинно лучше для меня, я не против изучать новые вещи, и я особенно не против более образованных людей, которые учат меня этим новым вещам. Я ценю время, которое вы вложили в этот ответ, и я буду изучать это сообщение. –

    +0

    Есть ли лучший способ выполнить команду без использования Ajax? Я не совсем уверен, что эта строка кода пытается захватить из URL-адреса// newIssue/14/'или что-то еще. Означает ли это, что на этой странице есть отдельный код? –

    +0

    AJAX относится к тому, когда Javascript код извлекает данные с сервера без загрузки новой страницы, поэтому, если вам нужно, чтобы данные загружались Javascript * после * загрузки страницы, тогда требуется AJAX. –

    0

    Очень трудно понять вопрос, я не вижу функции grabber в строке 9. Строка 9 выполняет метод $.get jQuery, который выполняет AJAX request.

    Этот запрос указывает, что он ожидает возврата json, что означает, что параметр, переданный функции обратного вызова (data), содержит некоторые данные в формате json. (Кстати, JSON - это независимый язык - его просто Javascript).

    +0

    Спасибо за разъяснение –

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