2013-04-22 13 views
0

Интеграция Api, которая имеет события, которые вызывают функции, которые должны находиться в глобальном пространстве. Я использую магистраль для определения представлений и моделей, которые отвечают на эти обратные вызовы, что было бы лучшим способом связать этот обратный вызов, чтобы он вызывал функцию в экземпляре модели, например: получил экземпляр чего-то типа этоГлобальные обратные вызовы с использованием функций объекта

Model.extend({ 
     thisIsTheApiCallback: function() { 
      //DO WORK 
     } 
    }) ; 

вести себя как этот скрипт на странице

<script language="JavaScript" type="text/javascript"> 
    function thisIsTheApiCallback() { 
     //DO WORK 
    } 

</script> 
+0

Очевидно, что это далеко не мой родной язык. просто пытаясь сделать окно.thisIsTheApiCallback = ModelInstance.thisIsTheApiCallback. Это хорошее решение? любая другая идея? – Paranoid42

+0

Если вы не против иметь глобальные переменные, которые будут работать нормально. –

ответ

0

Если вы хотите, чтобы ваша модель косвенно слушать глобальный обратный вызов, вы можете использовать Backbone направить событие. Имейте в виду, что каждый экземпляр создаваемой модели получал бы doSomething, вызываемый при вызове глобального обратного вызова.

// global callback function 
function thisIsTheApiCallback() { 
     Backbone.trigger('foo'); 
    } 

// MyModel doesn't need to know about the global callback. 
var MyModel = Model.extend({ 
     initialize:function(){ 
      this.listenTo(Backbone, 'foo', this.doSomething); 
     }, 

     doSomething: function() { 
      //DO WORK 
     } 
    }) ; 
+0

Этот ответ является наилучшим вариантом в вашем случае IMHO. Вместо того, чтобы запускать события на самой Backbone, вы можете создать объект глобальной шины событий следующим образом: 'var eventBus = _.extend ({}, Backbone.Events)', а затем использовать 'eventBus.trigger (...)' и 'this. listenTo (eventBus, ...) '. Вы также можете присоединить слушателя ко всем событиям для отладки следующим образом: 'eventBus.on ('all', console.debug, console)' –