नमस्ते, मैं जेएस में प्रॉम्प्ट का उपयोग करके इनपुट प्राप्त करने की कोशिश कर रहा हूं और उस इनपुट को बाद में नियमित कॉलबैक में पास कर दिया जाता है जिसे स्क्रीन में प्रिंट किया जाता है, यह मेरा डैश कोड और कस्टम-स्क्रिप्ट.जेएस कोड है

डैश.py:

import dash
import dash_table
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input,Output,State,ClientsideFunction



app=dash.Dash()
server = app.server
app.layout=html.Div([
    dcc.Store(id='error',data={}),
    html.Div(id='output')
])

app.clientside_callback(
    ClientsideFunction(
        namespace='clientside',
        function_name='error_text'
    ),
    
    Output('error','data')
)

@app.callback(Output('output','children'),
              [Input('error','data')])
def error_text(error):
    return error
    
       
        
if __name__ == '__main__':
    app.run_server(debug=True)

एसेट/कस्टम-स्क्रिप्ट.जेएस:

window.dash_clientside = Object.assign({}, window.dash_clientside, {
    clientside: {
        error_text: function() {
            var error=prompt('enter the error text');
            if(error!==null){
            return {errorText:error};
            }
        }
    }
});

जब मैं अपना डैश ऐप चलाता हूं, तो प्रॉम्प्ट यानी क्लाइंट साइड स्क्रिप्ट बिल्कुल काम नहीं कर रही है और मुझे नियमित कॉलबैक के लिए एक त्रुटि मिल रही है जैसे कॉलबैक के लिए इनपुट कोई नहीं है, कृपया मेरी मदद करें

त्रुटि संदेश: ** आउटपुट के लिए कॉलबैक में: त्रुटि.डेटा कोई Input तत्व नहीं हैं। Input तत्वों के बिना, इसे कभी भी कॉल नहीं किया जाएगा।

Input घटकों की सदस्यता लेने से जब भी उनके मान बदलते हैं तो कॉलबैक कहा जाता है। **

0
Vignesh K 5 जून 2021, 10:52

1 उत्तर

सबसे बढ़िया उत्तर

समस्या यह है, जैसा कि त्रुटि कहती है, कि आपके clientside_callback में Input नहीं है। नियमित डैश कॉलबैक की तरह, क्लाइंटसाइड कॉलबैक में भी कम से कम एक Input और एक Output होना चाहिए:

app.clientside_callback(
    ClientsideFunction(namespace="clientside", function_name="error_text"),
    Output("error", "data"),
    Input("error", "data"),
)

उपरोक्त पृष्ठ लोड पर काम करेगा क्योंकि डैश ऐप की शुरुआत पर कॉलबैक चलाता है यदि अन्यथा निर्दिष्ट नहीं है।

अब आप ऊपर दिए गए उदाहरण से भिन्न इनपुट/ट्रिगर रखना चाहेंगे, लेकिन आपके पास कम से कम एक Input होना चाहिए।


इसके अलावा आप अपने error_text फ़ंक्शन में किसी ऑब्जेक्ट को वापस नहीं कर सकते क्योंकि आपका error_text कॉलबैक आउटपुट children पर होता है जो ऑब्जेक्ट्स को स्वीकार नहीं करता है।

इस मामले में आप त्रुटि पाठ को इस प्रकार वापस कर सकते हैं:

window.dash_clientside = Object.assign({}, window.dash_clientside, {
  clientside: {
    error_text: function () {
      var error = prompt("enter the error text");
      if (error !== null) {
        return error
      }
    },
  },
});
1
Bas van der Linden 5 जून 2021, 13:00