我正在为使用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>
块中插入一些代码来监听我从扩展程序注入的javascript文件中调用的postMessage()
个调用。我希望能够从那里打电话给useful_func
,但无法弄清楚如何,或者我是否应该(如果没有,那么我将如何得出相同的结果)。
作为一个例子,我尝试了以下引用,所有引用都显示为未定义:
BigContainer.BaseView.$local_thing
BigContainer.BaseView.local_thing
Thing
document.getElementsByClassName('local_thing')[0].useful_func
重要的是,由于我正在为我不拥有的网站编写扩展程序,因此我无法修改该网站的Backbone.js代码来帮助自己。我需要处理那里的事情。
答案 0 :(得分: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();