2013-02-16 3 views
1

Я пишу расширение браузера для сайта, который использует Backbone.js. Его уместна код выглядит следующим образом (имена изменены, чтобы защитить невинных):Как вручную вызвать метод метода Backbone.js

var BigContainer = BigContainer || {}; 
(function($, exports) { 
    var Thing = Backbone.View.extend({ 
    ... 

    useful_func: function() { 
     // Does something I need to call 
    }, 
    ... 
}); 

(function($, exports) { 
    BigContainer.BaseView = Backbone.View.extend({ 
    ... 
    render: function() { 
     this.local_thing = new Thing({ 
      el: '.local_thing' 
     }); 
    } 
    ... 
}); 

Я также вставить код в <script> блок для прослушивания postMessage() звонков, которые я делаю из моего внутреннего абонента закачиваемой файла JavaScript. Я хотел бы иметь возможность позвонить useful_func оттуда, но не могу понять, как, или если я даже должен (а если нет, то как я могу прийти к тому же результату).

В качестве примера, я попытался следующие ссылки, все из которых проявляющиеся как неопределенные:

  • BigContainer.BaseView.$local_thing
  • BigContainer.BaseView.local_thing
  • Thing
  • document.getElementsByClassName('local_thing')[0].useful_func

Важно , так как я пишу расширение для сайта I не владею, я не могу изменить код Backbone.js сайта, чтобы помочь себе. Мне нужно работать с тем, что есть.

+0

Где вы создания 'BaseView' пример? Вам нужно будет сделать 'inst.local_thing.useful_func' в этом конкретном экземпляре представления. – loganfsmyth

+0

Я обновил свой код, чтобы добавить это. Они оба завернуты в функции, поэтому ссылка на экземпляр не сохраняется, из того, что я могу сказать. – Dov

+1

Чтобы было ясно, вы определяете представления в коде, который вы указали, но где-то вы делаете var var = new BaseView(); view.render(); ', чтобы фактически создать новый isntance, поэтому используйте этот' view' с моим предыдущим фрагментом. – loganfsmyth

ответ

1

С линией BigContainer.BaseView = Backbone.View.extend({ вы определяете новый тип вида, называемый BaseView, но это только определение. Вам нужен фактический экземпляр представления в вашем коде. Это было бы куда-нибудь, где вы new BaseView (в данном случае, это следующее :)

// Where view is created 
(function($, undefined) { 
    BigContainer.OtherThing = { 
    ... 
    create: function(config, params) { 
     this.view = new BigContainer.BaseView(...); 
    } 
    ... 
}) 

с найденным, вы могли бы сделать что-то вроде этого:

// Your code, reach into that instance and its subview, and call 'usefulFunc'. 
BigContainer.OtherThing.view.local_thing.useful_func(); 
Смежные вопросы