Zurb foundation 响应式/JavaScript框架的氚函数设计 我使用MoWebWeb/氚来使用ZURB基金会框架来响应常规的桌面网站。

Zurb foundation 响应式/JavaScript框架的氚函数设计 我使用MoWebWeb/氚来使用ZURB基金会框架来响应常规的桌面网站。,zurb-foundation,moovweb,tritium,Zurb Foundation,Moovweb,Tritium,作为其中的一部分,我想创建帮助函数,使基础小部件变得像已经在MOVOWEB中一样。但是一些基础组件,比如复杂的布局,需要比单个函数调用更合理的配置。 例如,启用顶栏需要类似以下结构的内容: # Use the foundation topbar insert_top("nav", class: "top-bar") { # Create the title area insert("ul", class: "title-area") { inject("<li class

作为其中的一部分,我想创建帮助函数,使基础小部件变得像已经在MOVOWEB中一样。但是一些基础组件,比如复杂的布局,需要比单个函数调用更合理的配置。 例如,启用顶栏需要类似以下结构的内容:

# Use the foundation topbar
insert_top("nav", class: "top-bar") {

  # Create the title area
  insert("ul", class: "title-area") {
    inject("<li class='name'><h1><a href='/'>Website Name</a></h1></li>")
    inject("<li class='toggle-topbar menu-icon'><a href='#'><span>Menu</span></a></li>")
  }

  # Grab the header links and put them in the top bar
  insert("section", class: "top-bar-section") {
    insert("ul", class: "left") {

      # Move the original header links here
      move_here("//span[@class='pagetop']//a"){
        wrap("li")
      }
    }
  }
}
<代码>使用基础顶杆 插入顶部(“导航”,类别:“顶部栏”){ #创建标题区域 插入(“ul”,类别:“标题区”){ 注入(“
  • ”) 注入(“
  • ”) } #抓取标题链接并将它们放在顶部栏中 插入(“部分”,类别:“顶杆部分”){ 插入(“ul”,类别:“左”){ #将原始标题链接移到此处 将_移到此处(//span[@class='pagetop']//a){ 包裹(“li”) } } } }
    将其抽象为可重用的氚函数的正确方法是什么?这些氚函数既可以最小化样板文件,又可以提供灵活性?

    在我的用例中,我通过将布局分解为相互嵌套的相关函数来处理这个问题。因此,上面的原始代码变成:

    # enable the foundation top bar
    zurb_topbar() {    
      zurb_topbar_title("Website Name", "Menu", "menu-icon")
      zurb_topbar_left() {
        move_here("//span[@class='pagetop']//a"){
          wrap("li")
        }        
      }
    }
    
    其中,功能定义为:

    @func XMLNode.zurb_topbar() {   
        insert_top("nav", class: "top-bar") {
          yield()
        }
    }
    
    @func XMLNode.zurb_topbar_title(Text %name, Text %menu_btn_name, Text %menu_icon) {
        insert("ul", class: "title-area") {
          inject("<li class='name'><h1><a href='/'>" +%name +"</a></h1></li>")
          inject("<li class='toggle-topbar "+%menu_icon+"'><a href='#'><span>"+%menu_btn_name+"</span></a></li>")
        }
    }
    
    @func XMLNode.zurb_topbar_left() {
      insert("section", class: "top-bar-section") {
        insert("ul", class: "left") {
         yield()
        }
      }
    }
    
    @func XMLNode.zurb_topbar(){
    插入顶部(“导航”,类别:“顶部栏”){
    收益率()
    }
    }
    @func XMLNode.zurb_topbar_标题(文本%name,文本%menu_btn_名称,文本%menu_图标){
    插入(“ul”,类别:“标题区”){
    注入(“
  • ”) 注入(“
  • ”) } } @func XMLNode.zurb_topbar_left(){ 插入(“部分”,类别:“顶杆部分”){ 插入(“ul”,类别:“左”){ 收益率() } } }
    您可以想象一个
    zurb\u topbar\u right
    函数,它可以选择性地用于定义topbar的右侧部分

    注意:对于
    zurb\u topbar\u title
  • 的href和结构是硬编码的,因为除了root之外,您通常不太可能将href指向任何地方。相反,您可能需要自定义的部分是顶部栏的标题、菜单按钮的标题以及菜单栏图标的存在

    而对于
    zurb\u topbar\u left
  • 的内容可能会由程序员来填充,因此产生了收益

    权衡似乎是,自动强制以正确的方式使用正确的功能组合变得更加棘手,即

    • 您必须同时使用
      zurb\u topbar
      zurb\u topbar\u title
    • 但只有一个
      zurb\u topbar\u left
      zurb\u topbar\u right
    • zurb_topbar必须包括
      zurb_topbar_left
    • 等等等等