Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.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 带主干样板的PubSub?_Javascript_Backbone.js_Requirejs_Underscore.js_Publish Subscribe - Fatal编程技术网

Javascript 带主干样板的PubSub?

Javascript 带主干样板的PubSub?,javascript,backbone.js,requirejs,underscore.js,publish-subscribe,Javascript,Backbone.js,Requirejs,Underscore.js,Publish Subscribe,问题: 我在屏幕上有3个UI组件: 顶部菜单:选项true或false 左菜单:项目列表,如A、B、C、D 形式内容:一种形式。它的可见或隐藏取决于顶部菜单选项的值。它的内部内容根据选择的左侧菜单项而有所不同。例如,选定的A将显示2个输入框,而B将显示3个输入框,等等。。。 其工作方式是,用户将选择左侧菜单项,然后单击顶部菜单的选项,表单内容将显示出来 Top menu具有TopMenu型号 左菜单有LeftMenuCollection,其中包含这样的模型 { id: 0 label: "No

问题:

我在屏幕上有3个UI组件:

顶部菜单:选项true或false 左菜单:项目列表,如A、B、C、D 形式内容:一种形式。它的可见或隐藏取决于顶部菜单选项的值。它的内部内容根据选择的左侧菜单项而有所不同。例如,选定的A将显示2个输入框,而B将显示3个输入框,等等。。。 其工作方式是,用户将选择左侧菜单项,然后单击顶部菜单的选项,表单内容将显示出来

Top menu具有TopMenu型号

左菜单有LeftMenuCollection,其中包含这样的模型

{
id: 0
label: "No label yet"
}
表单内容的FormContentModel太长,无法放入此处

我有两个视图:TopMenuView和LeftMenuView用于TopMenu和LeftMenuCollection。但是表单内容视图的视图let调用FormContentView必须从TopMenu和LeftMenuCollection中获取值,以便知道何时可见以及在可见后显示什么

当前想法:

用户对LeftMenuView的操作将触发事件,FormContentView将根据所选内容在隐藏的DOM中填充HTML

TopMenuView将触发FormContentView可见

然后FormContentView将保存到它自己的FormContentCollection中

对于1和2,我只需要使用PubSub模型,如下所示:

但因为我用的是骨干样板。我计划这样做是因为app.js中已经创建了app对象:

app.PubSub = _.extend({}, Backbone.Events)
问题:

如何以及在何处创建PubSub对象?它在router.js中吗


这样做正确吗?我也在考虑复合模型,将TopMenu和LeftMenuCollection组合到另一个FormContentCollection下,但大多数互联网用户都说使用PubSub。

定义应用程序变量后,立即创建PubSub

我更喜欢将PubSub直接连接到主干对象,并在主干加载后立即进行连接。我以前写过:

下面是另一个可能更简单的想法:

创建新模型并在所有视图之间共享

请注意,您可以将第二个模型添加到视图中,它们不必设置为view.model


左视图和俯视图可以。设置其属性,表单视图可以使用。在“更改”上,函数。。。并通过显示/隐藏视图进行响应。

您的链接非常棒。我添加了app.notif=..extend{},Backbone.Events;在app.js中,并将其传递给Views var myView=new myView{notif:app.notif}。所以在视图对象中,我只需执行this.options.notif.trigger。非常有用!谢谢。添加第三个集合对象并使用它保持所选对象的状态的另一个想法:
app.PubSub = _.extend({}, Backbone.Events)