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'
        });
    }
    ...
});

また、拡張機能の挿入されたjavascriptファイルからの呼び出しを<script>リッスンするために、ブロックにコードを挿入しています。postMessage()そこから電話をかけたいのです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 に答える