PubSub与Backbone Boilerplate?

时间:2012-10-18 09:27:48

标签: javascript backbone.js requirejs underscore.js publish-subscribe

问题:

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

  1. 热门菜单:选项(true或false)
  2. 左侧菜单:项目列表,例如A,B,C,D
  3. 表单内容:表单。它是可见隐藏,具体取决于Top menu's Option的值。其内容取决于所选的Left menu's item。例如,A选中将显示2个输入框,而B显示3个输入框等...
  4. 它的工作方式是用户将选择左侧菜单项,然后单击顶级菜单的选项,表格内容将显示。

    热门菜单TopMenu型号

    {
    isSelected: false
    }
    

    左侧菜单LeftMenuCollection,其中包含此类型号

    {
    id: 0
    label: "No label yet"
    }
    

    表单内容FormContentModel太长,无法放入此处。

    TopMenuViewLeftMenuView我有2个观看次数:TopMenuLeftMenuCollection。但是,表单内容视图的视图(让我们调用FormContentView)必须从TopMenuLeftMenuCollection获取值,以便知道何时可见并且<可见后显示的强>什么。

    当前的想法:

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

    2. TopMenuView会触发FormContentView 可见

    3. 然后FormContentView将保存到自己的FormContentCollection

    4. 对于#1和#2,我只是使用了像这里的PubSub模型:fire an event from one view to another in backbone

      但是因为我使用Backbone Boilerplate https://github.com/tbranyen/backbone-boilerplate。我打算这样做是因为app对象已经在app.js中创建了:

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

      问题:

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

      PubSub是正确的方法吗?通过将TopMenuLeftMenuCollection合并到另一个FormContentCollection下,我也在考虑“复合模型”,但互联网上的大多数人都说使用了PubSub。

1 个答案:

答案 0 :(得分:2)

定义“app”变量后立即创建pubsub。

我更喜欢将PubSub直接附加到Backbone对象,我在骨干加载后立即执行。 (我之前写过:Backbone.js global notifications

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

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

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

Left和Top视图可以.set()其属性,Form视图可以使用.on('change',function ...)绑定到更改,并通过显示/隐藏视图进行响应。