1

我正在为使用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

重要的是,由于我正在为我不拥有的网站编写扩展程序,因此我无法修改该网站的 Backbone.js 代码来帮助自己。我需要处理那里的东西。

4

1 回答 1

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();
于 2013-02-16T03:26:25.797 回答