2016-11-22 5 views
1

Ich habe dies in meinem Client/templates/main.html:Zugang externes Skript in Meteor blaze Template.events

<head> 
    <title>app boil</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/quickblox/2.4.0/quickblox.min.js"></script> 
</head> 

So bin ich die quickblox api aufrufen. Dies liefert ein QB-Objekt.

Ich habe jetzt Client/templates/quickblox/quickbloxcall.js, die diesen Code hat:

import { Template } from 'meteor/templating'; 

import './quickbloxcall.html' 

Template.quickbloxcall.onRendered(function() { 
    console.log(QB.createSession); 
}); 


Template.quickbloxcall.events({ 
    'submit .quickblox-form'(event) { 
     var user = { 
      id: 4448514, 
      name: 'chatuserweb1', 
      login: 'chatuserweb1', 
      pass: 'chatuserweb1' 
     }; 

     QB.createSession({login: user.login, password: user.pass}, function(err, res) { 
      if (res) { 
       QB.chat.connect({userId: user.id, password: user.pass}, function(err, roster) { 
        if (err) { 
         console.log(err); 
        } else { 

         /* 
         * (Object) roster - The user contact list 
         * roster = { 
         * '1126541': {subscription: 'both', ask: null},  // you and user with ID 1126541 subscribed to each other. 
         * '1126542': {subscription: 'none', ask: null},  // you don't have subscription but user maybe has 
         * '1126543': {subscription: 'none', ask: 'subscribe'}, // you haven't had subscription earlier but now you asked for it 
         * }; 
         */ 

        } 
       }); 
      }else{ 
       console.log(err); 
      } 
     }); 
    }, 
}); 

In obigen Code, wenn ich Formular abgesendet haben, ich diesen Fehler in der Konsole erhalten:

Uncaught TypeError: Cannot read property 'createSession' of undefined(…) 

Dies bedeutet also, dass das QB-Objekt nicht innerhalb von Template.quickblox.events submit Event-Handler zugänglich ist.

jedoch in console.log() bekomme ich diese:

function (params, callback) { 
    this.auth.createSession(params, callback); 
    } 

Dies bedeutet also, dass die Template.quickbloxcall.onRendered richtig das QB-Objekt geladen ist.

Wie kann ich auf dieses externe Skript in Template.quickblox.events zugreifen?

+0

Haben Sie versucht [$ .getScript] (https://api.jquery.com/jquery.getscript/)? –

+0

Warum verwenden Sie nicht die NPM-Version von Quickblox? vielleicht löst es dein Problem – Khang

Antwort

0

Was Sie auf der Konsole sehen, bestätigt, dass QB.createSession existiert. Aber sehen Sie, dass innerhalb dieser createSession Anruf ist ein Anruf an anderencreateSession!

Das heißt, ich glaube, Sie werden feststellen, dass this.auth innerhalb Qb.createSession das Objekt ist, das undefined ist, und die nicht verfügbar createSession gehört auth (undefined), nicht QB (definiert).

Dies passiert, wenn Sie nicht QB.init vor dem Aufruf QB.createSession ausgeführt haben. init wird in the QuickBlox JavaScript SDK docs here ein bisschen erklärt.