2016-11-22 2 views
1

у меня есть это в моем клиенте/шаблоны/main.html:Доступ внешний скрипт в метеоритный блеске 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> 

Так я называю quickblox апи. Это обеспечивает объект QB.

Я теперь клиент/шаблоны/quickblox/quickbloxcall.js, который имеет следующий код:

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); 
      } 
     }); 
    }, 
}); 

В коде выше, когда я отправить форму, я получаю эту ошибку в консоли:

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

Таким образом, это означает, что объект QB недоступен внутри Template.quickblox.events submit обработчик событий.

Однако в console.log() я получаю это:

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

Таким образом, это означает, что Template.quickbloxcall.onRendered правильно загрузки объекта QB.

Как получить доступ к этому внешнему скрипту в Template.quickblox.events?

+0

Вы пробовали [$ .getScript] (https://api.jquery.com/jquery.getscript/)? –

+0

Почему вы не используете версию Quickblox для NPM? возможно, это решит вашу проблему – Khang

ответ

0

Что вы видите на консоли, подтверждает, что существует QB.createSession. Но посмотрите, что в этом createSession звонок является звонок в другойcreateSession!

То есть, я думаю, вы обнаружите, что this.auth внутри Qb.createSession является объект, который undefined и недоступен createSession принадлежит auth (не определено), не QB (определено).

Это произойдет, если вы не запустили QB.init перед вызовом QB.createSession. init объясняется немного в the QuickBlox JavaScript SDK docs here.