2016-09-24 3 views
1

У меня возникли проблемы с внедрением плагина Card.io для Cordova. Есть инструкции на странице GitHub о том, как установить и реализовать плагин: https://github.com/card-io/card.io-Cordova-PluginПлагин Cordova Card.IO плагин

Я добавил врезание делая

$ cordova plugin add https:///... 

И добавил кнопку они говорят вам, чтобы добавить на страницу GitHub. До этого момента я почти уверен, что делаю все так, как должен. Здесь возникает проблема, хотя фактическая реализация в приложении. Я использую ui framework в своем приложении, и поэтому у меня нет файла index.js, и мой код не похож на код в стандартном index.js в отношении обработки deviceReady. Я просто ...

.ready(function() { 
    // Code to fire on device ready. 
}): 

Я немного знаком с обратными вызовами, но я не знаю, что происходит в их примере. весь "пример: function() {..." для меня совершенно новый.

Может кто-то, пожалуйста, переписать этот пример так, чтобы это было несколько функций, которые хорошо структурированы и имеют немного больше смысла?

Я пытался делать это, с моим кодом теперь, глядя, как это:

.ready(function() { 
     CardIO.canScan(onCardIOCheck); 
    }); 

    function onCardIOComplete() { 
     var cardIOResponseFields = [ 
      "cardType", 
      "redactedCardNumber", 
      "cardNumber", 
      "expiryMonth", 
      "expiryYear", 
      "cvv", 
      "postalCode" 
     ]; 

     var len = cardIOResponseFields.length; 
     alert("card.io scan complete"); 
     for (var i = 0; i < len; i++) { 
      var field = cardIOResponseFields[i]; 
      alert(field + ": " + response[field]); 
     } 
    } 

    function onCardIOCancel() { 
     alert("card.io scan cancelled"); 
    } 

    function onCardIOCheck(canScan) { 
     alert("card.io canScan? " + canScan); 
     var scanBtn = document.getElementById("scanBtn"); 
     if (!canScan) { 
      scanBtn.innerHTML = "Manual entry"; 
     } 

     scanBtn.addEventListener("click", function(e) { 
      var options = { 
       "requireExpiry": true, 
       "requireCVV": false, 
       "requirePostalCode": false, 
       "restrictPostalCodeToNumericOnly": true 
      }; 
      CardIO.scan(options, onCardIOComplete, onCardIOCancel); 
     }); 
     } 

Это не работает, хотя. Я добавил alert() по обе стороны вызова внутри функции .ready(), чтобы узнать, срабатывает ли он. Оба огня, но это как если бы функция Card.canScan() не срабатывала вообще. Я добавил функцию alert() внутри функции onCardIOCheck, чтобы убедиться, что она когда-либо достигнута, но это не так.

Любая помощь была бы принята с благодарностью.

(Пожалуйста, обратите внимание: я не использую Angular.js, я использую только чистый Javascript с редкими JQuery)

ответ

1

Вы должны заменить

.ready(function() { 
    CardIO.canScan(onCardIOCheck); 
}); 

С

document.addEventListener('deviceready', function() { 
    CardIO.canScan(onCardIOCheck); 
}, false); 

готовое событие, которое вы использовали, - это готовое событие DOM, а не плагины cordova. Я считаю, что когда вы позвонили CardIO.canScan(onCardIOCheck);, плагин не был загружен и почему он не работает.

+0

Спасибо, я попробовал ваше решение. Это помогает, но не полностью работает. Это помогает в том, что Card.io теперь срабатывает должным образом. Однако он запускает функцию canScan, но обратный вызов не срабатывает. Что еще более странно, так это то, что когда я помещаю приложение в фоновый режим и возвращаюсь к нему, обратный вызов срабатывает со статусом «true», что является положительным. Но почему он срабатывает только тогда, когда приложение находится в фоновом режиме. Затем, когда я нажимаю кнопку, ничего не происходит, но снова, когда я помещаю приложение в фоновом режиме, он вызывает интерфейс Card.io. Интерфейс снова работает только в фоновом режиме. Мысли? – user1840352