一.需求分析
- 在 02资料/章节210商品新增中商品类目显示 中把内容粘贴到项目中
- 点击后显示类目选择页面,里面是一个tree组件,按照tree的深度逐层进行显示,刚显示对话框时并没有向服务器端传递数据,此时默认id=0,服务器端查询所有parent_id为0的数据
- EasyUI Tree组件中每个节点属性如下,必须为这些名称,否则无法识别,所以需要在commons/EasyUI.go中新建一个结构体表示tree的节点
id:绑定节点的标识值。text:显示的节点文本。iconCls:显示的节点图标CSS类ID。checked:该节点是否被选中。state:节点状态,'open' 或 'closed'。attributes:绑定该节点的自定义属性。target:目标DOM对象。
- Tree的state表示节点状态,如果节点是closed状态,节点将显示成文件夹的形式,可以打开这个节点,开始时EasyUI默认向服务器端发送当前节点的id.如果节点的状态是closed节点表示叶子节点,没有子节点
二.代码演示
- 在commons/EasyUI.go中添加新的结构体
//treetype EasyUITree struct { Id int `json:"id"` Text string `json:"text"` State string `json:"state"`}
- 在/item/cat/TbItemCatDao.go中添加新函数
/*根据parent_id查询所有子类目 */func selByPid(pid int) (c []TbItemCat){ rows,err:=commons.Dql("select * from tb_item_cat where parent_id=?",pid) if err!=nil{ fmt.Println(err) return nil } c = make([]TbItemCat,0) for rows.Next() { var t TbItemCat rows.Scan(&t.Id,&t.ParentId,&t.Name,&t.Status,&t.SortOrder,&t.IsParent,&t.Created,&t.Updated) c= append(c,t) } commons.CloseConn() return}
- 修改/item/cat/TbItemCat.go中结构体如下
package cat//商品类目type TbItemCat struct { Id int ParentId int Name string Status byte SortOrder int8 IsParent bool//此处由byte修改为bool Created string Updated string}
- 在/item/cat/TbItemCatService中添加新函数
func showCatByPidService(pid int) (tree []commons.EasyUITree){ cats:=selByPid(pid) tree=make([]commons.EasyUITree,0) for _,n:= range cats{ state:="open" if n.IsParent{ state="closed" } tree=append(tree,commons.EasyUITree{n.Id,n.Name,state}) } return}
- 在/item/cat下新建TbItemCatController.go
package catimport ( "net/http" "strconv" "encoding/json" "commons")func ItemCatHandler(){ commons.Router.HandleFunc("/item/cat/show",showItemCatController)}func showItemCatController(w http.ResponseWriter,r *http.Request){ id:=r.FormValue("id") if id==""{ id="0" } idInt,_:=strconv.Atoi(id) t:=showCatByPidService(idInt) b,_:=json.Marshal(t) w.Header().Set("Content-type","application/json;charset=utf-8") w.Write(b)}
- 在main.go中添加ItemCatHandler()函数的引用
package mainimport ( "net/http" "html/template" "user" "commons" "github.com/gorilla/mux" "item" "item/cat")//显示登录页面func welcome(w http.ResponseWriter, r *http.Request) { t, _ := template.ParseFiles("view/login.html") t.Execute(w, nil)}//restful显示页面func showPage(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) t, _ := template.ParseFiles("view/" + vars["page"] + ".html") t.Execute(w, nil)}func main() { commons.Router.PathPrefix("/static").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) commons.Router.HandleFunc("/", welcome) //满足/page/{page}格式的处理 commons.Router.HandleFunc("/page/{page}", showPage) //用户 user.UserHandler() //商品 item.ItemHandler() //商品类目 cat.ItemCatHandler() http.ListenAndServe(":80", commons.Router)}