0

このコードは Marionette の例です。

AppLayout = Backbone.Marionette.Layout.extend(
{
    template: "#layout-template",

    regions: 
    {
        menu: "#menu",
        content: "#content"
    }
});

var layout = new AppLayout();

layout.menu.show(new MenuView());
layout.content.show(new MainContentView());

最後の 2 行は私を混乱させます。なぜ読まないのですか:

layout.regions.menu.show(new MenuView());
layout.regions.content.show(new MainContentView());

誰かがなぜlayout.menuが機能し、layout.regions.menuが機能しないのか説明できますか?

テンプレートにアクセスしたい場合はどうすればよいですか? それはlayout.templateではないでしょうか?テンプレートとリージョンは、レイアウト内で同じ深さにあります。

マリオネット コードのコンストラクタ関数は次のとおりです。

// Ensure the regions are avialable when the `initialize` method
        // is called.
        constructor: function () {
            this._firstRender = true;
            this.initializeRegions();

            var args = Array.prototype.slice.apply(arguments);
            Marionette.ItemView.apply(this, args);
        },
4

2 に答える 2

0

「layout.menu」は「layout.regions.menu」よりも短くてシンプルなので、そのように実装されたと思います。リテラルの「#menu」がリージョン マネージャー オブジェクトに置き換えられることを期待していたようです。

テンプレートを含む、ビューの作成時に渡したオプションは、layout.options にあります。したがって、あなたの場合、layout.options.template は '#layout-template' に等しくなければならず、領域定義ハッシュは layout.options.regions になります... それでも同じレベルです。

于 2013-03-27T18:50:01.830 に答える
0

例にそれ以上のものがない限り、Backbone.Marionette.Layoutメソッドのように示しているので、あなたが思っているようにアクセスしていませんregions.menu

あなたが提供したコードだけで、上記のコードは実際にmenu属性を作成しています。これにはshow属性があり、layoutオブジェクトは実際には次のようになります。

layout {
    menu : {
        show : new MenuView
    },
    content : {
         show : new MainContentView
    },

    template: "#layout-template",

    regions: 
    {
        menu: "#menu",
        content: "#content"
    }
}

JavaScript では、(dot)演算子を使用して属性のプロパティにアクセスできます。または、その名前のプロパティが存在しない場合は、そのプロパティを作成します。

私はフレームワークに精通していませんが、プロパティ ルックアップ チェーンbackbone.jsの一部をスキップできるようになっていると思います。つまり、上記はこれをレイアウト オブジェクトとして生成することになります。

 layout {
    template: "#layout-template",

    regions: 
    {
        menu : {
            show : new MenuView
        },
        content : {
            show : new MainContentView
        }
    }
}

しかし、私はbackbone.

オブジェクト モデルの詳細と、オブジェクト モデルが継承とどのように連携するかについては、こちらをご覧ください。

于 2013-03-27T18:56:49.897 に答える