首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用Backbone.js创建子菜单

用Backbone.js创建子菜单
EN

Stack Overflow用户
提问于 2016-02-03 06:47:50
回答 1查看 231关注 0票数 3

在使用Backbone.js和underscore.js时,尝试为菜师(第一级)创建一个子菜单列表(第二级)。

这就是我用JSON创建的菜单(我已经通过将它打印到浏览器控制台来确认它的存在):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[
  {
    "name": "Sök kund",
    "path": 
    [
      {
        "subName": "Fondkonto",
        "subPath": "#fondkonto"
      },

      {
        "subName": "Kassakonto",
        "subPath": "#kassakonto"
      },

      {
        "subName": "Nytt sparande",
        "subPath": "#nyttsparande"
      }
    ]
  },

  {
    "name": "Ny kund",
    "path": "#new_customer"
  },
    {
    "name": "Dokument",
    "path": "#documents"
  },

  {
    "name": "Blanketter",
    "path": "#forms"
  }
]

这是我在索引文件中显示的代码,目前它只打印第一级:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/template" id="menus">
  {{ _.each(menus, function(menu) { }}
    <li><a href="{{= menu.path }}">{{= menu.name }}</a>
      <ul>
        <li>
          <a href="{{= menu.path.subPath }}">{{= menu.path.subName }}</a>
        </li>
      </ul>
    </li>
  {{ }); }}
</script>

如果您想知道视图和模型/集合是如何构建的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Menus = require("../collections/menus");

var AllMenus = Backbone.View.extend({

  el: "#menuContent",

  template: _.template(document.getElementById("menus").innerHTML),

  initialize: function() {

    "use strict";

    this.menus = new Menus();
    this.listenTo(this.menus, "reset", this.render);

    this.menus.fetch({
      reset: true,
      url: "./data/menus.json",
      success: function() {
        console.log("Succesfully loaded menus.json file.");
      },
      error: function() {
        console.log("There was some error trying to load and process menus.json file.");
      }
    });
  },

  render: function() {
    console.log( this.menus.toJSON());
    this.$el.html(this.template({ menus: this.menus.toJSON() }));
    return this;
  }

});

var viewMenus = new AllMenus();

型号:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Menu = Backbone.Model.extend({
  defaults: {
    name: "",
    path: ""
  }
});

module.exports = Menu;

集合:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var Menu = require("../models/menu");

var Menus = Backbone.Collection.extend({
  model: Menu
});

module.exports = Menus;

并不是说要粘贴这么多代码,而是为了让您了解我是如何构建它的。但是我因为试图向subMenus展示却没有成功而陷入困境。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 21:17:13

你的数据结构错了。您不希望在字符串和数组之间切换path值。path应该始终是一个字符串,您应该创建一个新的属性来保存子菜单数组;“子菜单”将是一个好名字。此外,子菜单项不应将subNamesubPath作为键名。这些对象在概念上与它们的父对象相同,它们应该具有相同的键,namepath

修改后的数据结构应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var menus = [
    {
        "name": "Sök kund",
        "path": "#",
        "submenu": [
            {
                "name": "Fondkonto",
                "path": "#fondkonto"
            },
            {
                "name": "Kassakonto",
                "path": "#kassakonto"
            },
            {
                "name": "Nytt sparande",
                "path": "#nyttsparande"
            }
        ]
    },
    {
        "name": "Ny kund",
        "path": "#new_customer",
        "submenu": []
    },
    {
        "name": "Dokument",
        "path": "#documents",
        "submenu": []
    },
    {
        "name": "Blanketter",
        "path": "#forms",
        "submenu": []
    }
];

接下来,我们将更新您的模板,以迭代顶级菜单项,并有条件地遍历它们的子菜单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/template" id="menus">
    {{ _.each(menus, function(menu) { }}
        <li>
            <a href="{{= menu.path }}">{{= menu.name }}</a>
            {{ if (menu.submenu && menu.submenu.length > 0) { }}
                <ul>
                    {{ _.each(menu.submenu, function (submenu) { }}
                        <li><a href="{{= submenu.path }}">{{= submenu.name }}</a></li>
                    {{ }); }}
                </ul>
            {{ } }}
        </li>
    {{ }); }}
</script>

注意:我假设您正在执行如下操作,以告诉下划线使用胡子样式语法覆盖默认模板设置。我从this answer复制了这些设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_.templateSettings = {
    evaluate: /\{\{(.+?)\}\}/g,
    interpolate: /\{\{=(.+?)\}\}/g,
    escape: /\{\{-(.+?)\}\}/g 
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35180153

复制
相关文章
用tk创建菜单
from tkinter import * from tkinter import messagebox class Application(Frame): def __init__(self,master=None): # Frame是父类,得主动的调用父类 的构造器 super().__init__(master) # super() 代表的是父类的定义,而不是父类的对象 self.master = master self.
一写代码就开心
2020/11/20
1.5K0
用tk创建菜单
Backbone.js
注:教程请参见这里(本文有很多内容都是从这里翻译的),官方网站在这里;综合例子参见这里。
四火
2022/07/15
9580
Backbone.js
Android-SubMenu选项菜单和子菜单
简介: SubMenu:代表一个子菜单,包含1~N个MenuItem 实现效果: 具体实现方法: 主活动 MainActivity: public class MainActivity extends AppCompatActivity { //定义 “字体大小” 菜单项的标识 final int FONT_10 = 0x111; final int FONT_12 = 0x112; final int FONT_14 = 0x113; final int FON
圆号本昊
2021/09/24
1.3K0
Android-SubMenu选项菜单和子菜单
Backbone.js 简介
Backbone.js提供模型(models)、集合(collections)、视图(views)结构。
一个会写诗的程序员
2018/08/20
8170
Backbone.js 简介
TienChin 创建菜单页面
上一节当中我们只是给后台添加了对应的菜单,实际上对应的页面还没有存在这节主要就是创建出来页面:
程序员 NEO
2023/10/12
1250
TienChin 创建菜单页面
VBA创建弹出菜单
fanjy
2023/09/25
5070
VBA创建弹出菜单
用 jest 单元测试改善老旧的 Backbone.js 项目
对于早期的前端 SPA 项目,Backbone.js + Require.js 是一种常见的技术组合,分别提供了基础的 MVC 框架和模块化能力。
江米小枣
2020/06/16
3.5K0
用 jest 单元测试改善老旧的 Backbone.js 项目
2. 创建菜单界面
对于复杂的界面设计,我们在每个界面下递归细分功能模块,直到实现最基本的功能模块。模块化设计便于项目创建、更新和维护。
浪漫主义狗
2022/11/14
1.6K0
GTK 菜单的创建详解
============================================================================== 创建菜单条
RainMark
2019/09/10
1.5K0
创建Qt子工程
❝使用QtCreator创建子工程(方便组织和管理项目工程)。 ❞ 「创建项目」。 选择「其他项目」->「子目录项目」。 设置项目「名字」和「路径」。 一直到下一步直到「完成&添加子项目」。 创建好项
Qt君
2020/02/24
7460
安卓开发_浅谈SubMenu(子菜单)
子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤:   (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单   (2) 调用SubMenu的add()方法,添加子菜单项   (3) 覆盖onContextItemSelected()方法,响应子菜单的单击事件 示例: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 1
听着music睡
2018/05/18
9350
python开发_tkinter_多级子菜单
==========================================================
Hongten
2018/09/13
1.9K0
python开发_tkinter_多级子菜单
【jQuery进阶】子菜单插件Slight Submenu
兼容所有浏览器(记住,jQuery的2 *及以上不支持<IE9,如果您使用的是,对于那些旧的浏览器不支持)
用户5640963
2019/07/26
1.6K0
在ToolBar上创建菜单
好久没写过界面了,最近用最新的支援库,官方建议AppBar+ToolBar代替原ActionBar。然后翻了一下怎么往ToolBar上创建按钮,翻了半天没一个可以。。。最后发现把onCreateOptionsMenu丢了(网上的大爷们这么默契,全部都把这部分代码忽略掉真的好吗)。附上ToolBar上创建菜单的方法。
sickworm
2019/02/27
1.1K0
iOS创建子工程
实际开发中,我们可能会同时开发好几个端,比如楼主目前开发的家教平台,需要老师端,家长端,助教端三个端。有很多工具方法,或者封装的自定义控件都是可以复用的。我们就可以把公用的代码抽取出去,新建一个工程,
王大锤
2018/05/17
8020
ubuntu、deepin 程序启动菜单创建
ubuntu、deepin 程序启动菜单创建 ubuntu、deepin中webstorm、androidsudio 、idea等程序启动菜单创建。 1.首先我们到idea官网下载压缩包,下载完之后
用户2235302
2018/06/13
1.7K0
ubuntu、deepin 程序启动菜单创建
ubuntu、deepin 程序启动菜单创建 ubuntu、deepin中webstorm、androidsudio 、idea等程序启动菜单创建。 1.首先我们到idea官网下载压缩包,下载完之
码农笔录
2018/06/29
2.1K0
【说站】python PyQt子菜单的使用
以上就是python PyQt子菜单的使用,希望对大家有所帮助。更多Python学习指路:python基础教程
很酷的站长
2022/11/24
8470
点击加载更多

相似问题

用子菜单创建GUI

14

用backbone.js组织子视图?

24

用子菜单实现菜单

20

创建子菜单

20

创建子菜单

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文