Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中访问对象文本_Javascript_Backbone.js_Marionette - Fatal编程技术网

在Javascript中访问对象文本

在Javascript中访问对象文本,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,此代码是木偶的一个示例: AppLayout = Backbone.Marionette.Layout.extend( { template: "#layout-template", regions: { menu: "#menu", content: "#content" } }); var layout = new AppLayout(); layout.menu.show(new MenuView()); layout

此代码是木偶的一个示例:

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());
最后两行使我困惑。为什么不写:

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);
        },

我相信它是这样实现的,因为“layout.menu”比“layout.regions.menu”更短、更简单。看起来您希望文字“#菜单”替换为区域管理器对象


创建视图时传入的选项(包括模板)可以在layout.options中找到。因此,在您的示例中,layout.options.template应等于“#layout template”,区域定义散列将位于layout.options.regions。。。仍然是相同的级别。

除非示例中有更多内容,否则您将显示类似于
主干.marionete.Layout
方法的内容,然后它不会像您认为的那样访问
区域.menu

仅使用您提供的代码,上面的代码实际上创建了一个
菜单
属性,该属性随后具有一个
显示
属性,因此您的
布局
对象实际上如下所示:

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

    template: "#layout-template",

    regions: 
    {
        menu: "#menu",
        content: "#content"
    }
}
在javascript中,
(点)
操作符可用于访问属性的属性,或者如果不存在具有该名称的属性,则它将创建该属性

我不熟悉
backbone.js
框架,但我猜它们提供了跳过部分的功能,这意味着上述功能最终将生成此布局对象:

 layout {
    template: "#layout-template",

    regions: 
    {
        menu : {
            show : new MenuView
        },
        content : {
            show : new MainContentView
        }
    }
}
但这只是我的猜测,因为我没有使用
主干网


您可以了解有关

记录对象并检查它们的更多信息!child{u firstRender:true,regionManagers:Object,menu:Marionette.Region,content:Marionette.Region,render:function…}$el:jQuery.fn.jQuery.init[1]_事件:Object _firstRender:true _监听器id:“l12”_监听器:Object cid:“view11”内容:Marionette.Region el:“content”getEl:函数(选择器){options:objectproto:objectel:div菜单:木偶。Region el:“#menu”getEl:function(选择器){options:objectproto:Object-options:Object-regionManagers:Object-render:function-bound(){proto:SURROTETESORRY,但注释上没有代码视图。将文本包装在后面的记号中,
它将呈现代码视图
在这里它位于后面的记号中
子{u firstRender:true,RegionManager:Object,menu:Marionette.Region,content:Marionette.Region,render:function…}$el:jQuery.fn.jQuery.init[1]事件:对象firstRender:true listenerId:“l12”listenerId:“对象cid:“视图11”内容:木偶。区域el:“内容”getEl:函数(选择器){选项:对象uuuProto uu:对象el:div菜单:木偶。区域el:“菜单”getEl:函数(选择器){options:Object\uuuuu proto\uuuuuu:Object options:objectregionmanagers:Object render:function bound(){uuuuuuu proto\uuuuuu:subrogate
下面是我获得示例的链接:@kingdrew,所以我是正确的;当你调用
layout.render()时
它提供了
布局
对所有
区域的直接访问
,因此您将得到类似于我的第二个代码示例的结果。我查看了代码,它有以下注释://初始化此布局上的//
区域
属性中定义的区域。//hash b的键直接对布局对象上的属性进行编码//例如:
regions:{menu:“.menu container”}
//将生成一个
布局.menu
对象,它是一个区域//控制
.menu容器
DOM元素。注释确认发生了什么。它看起来像扩展({..this stuff..})中的所有内容像@John Mathis说的那样传入,但我在构造函数中没有看到选项对象。我同意“layout.menu”比“layout.regions.menu”更短、更简单,但通常程序员没有能力按照他们想要的方式而不是“它必须是”的方式来制作东西你是说extend参数中的花括号被作为一个选项传递给extend方法吗({…这里的东西…})是如何在构造对象中传递的,但如果它实际上只是传递到extends方法中的一个options对象,我可以理解它是如何成为开发人员想要的。我在问题中添加了构造函数方法。我认为你关于传递内容的想法是有道理的,但我不知道如何传递。它不应该在构造中吗ctor?我正在看代码,我确实看到了一个arguments文本,这是我应该传入的,只是在调用initializeRegions()方法之后才使用它。答案是我的结构只是用于输入。木偶类有自己的结构。