2017-08-31 3 views
2

I-Code haben wie in meiner glänzenden App ist:Shiny.onInputChange ist keine Funktion

$(function() { 
    Shiny.onInputChange('initialHash', parseHashQuery()); 
}); 

function parseHashQuery() { 
    var result = {}; 
    location.hash.replace(/^#/, '').split('&').filter(Boolean).forEach(function(part) { 
    var pair = part.split('='); 
    result[pair[0]] = pair[1]; 
    }); 
    return result; 
} 

aber ich habe Fehler:

common.js:59 Uncaught TypeError: Shiny.onInputChange is not a function 
    at HTMLDocument.<anonymous> (common.js:59) 
    at i (jquery.min.js:2) 
    at Object.fireWith [as resolveWith] (jquery.min.js:2) 
    at Function.ready (jquery.min.js:2) 
    at HTMLDocument.K (jquery.min.js:2) 
+0

FWIW, für das Parsen von Hash-Anfragen wie diese sollten Sie 'Session $ $ client url_search' verwenden, wie pro [diese] (https : //stackoverflow.com/questions/32872222/how-do-you-pass-parameters-to-ashiny-app-via-url) – Carl

+0

@Carl Hash wird nicht an den Server gesendet, url_search ist für Query-Zeichenfolge – jcubic

Antwort

2

Die Lösung war glänzend Ereignis zu verwenden:

$(document).on('shiny:sessioninitialized', function(event) { 
    Shiny.onInputChange('initialHash', parseHashQuery()); 
    }); 

die ausgeführt wurde, wenn Shiny.onInputChange bereits definiert wurde.

bei the source code Sehen, ist glänzend in jQuery-Ready-Funktion initialisiert aber mit Timeout:

$(function() { 
    // Init Shiny a little later than document ready, so user code can 
    // run first (i.e. to register bindings) 
    setTimeout(initShiny, 1); 
});