【仅供内部供应商使用,不提供对外解答和培训】

Page tree

【仅供内部供应商使用,不提供对外解答和培训】

Skip to end of metadata
Go to start of metadata

在新的fineui 后台框架中,是使用  type : dec.provider.tab_pane 来展示模板内容和显示网页,但是做自定义主题开发的时候不能直接使用它,需要给封装一个父类。

本文将讲述一个主题的例子效果如下图


其中红框部分就是

type : dec.provider.tab_pane

骨架部分代码


主题的骨架
    BI.config("dec.provider.layout", function (provider) {
        provider.setConfig({
            type: "bi.absolute",
            cls: "demo-background",
            items: [
                {
                    el: {
                        type: "zxl.tabs",//展示tabs实际是对于dec.provider.tab_pane的封装
                    },
                    top: 120, left: 0, right: 0, bottom: 0
                }, {
                    el: {
                        type: "dec.header"//自定义的头部
                    },
                    height: 120,
                    top: 0, left: 0, right: 0
                },
              
            ]
        });
        return provider;
    });
}());

上面代码中使用了一个zxl.tabs 他是对于dec.provider.tab_pane的封装,直接使用dec.provider.tab_pane会导致调用 下面代码 时无法打开模板


BI.Services.getService("dec.service.frame.tab_pane").addItem(item)


看下封装的 zxl.tabs  的代码


zxl.tabs
    (function () {
        var Widget = BI.inherit(BI.Widget, {

            _store: function () {
                return BI.Models.getModel("dec.zxl.tabs")
            },
            beforeInit: function (e) {
                this.store.initFavs(e); //初始化收藏和所有目录
            },
            render: function () {
                var self = this;
                return {
                    type: "bi.absolute",
                    items: [{
                        el: BI.Providers.getProvider("dec.provider.tab_pane").getTabPaneComponent({//不能直接用type:"dec.provider.tab_pane" 要使用Providers来获取el
                            ref: function (e) {
                                initHomepage();//初始化首页
                            },
                            showTabBar: true,
                            cls: "bi-background-tab",
                        }),
                        top: 0, bottom: 0, right: 0,
                        left: 0
                    }]
                };
            }
        });
        BI.shortcut("zxl.tabs", Widget);
    })();


这里有两个点第一个是自定义了一个model,第二个是使用 BI.Providers.getProvider("dec.provider.tab_pane").getTabPaneComponent

注意:不能直接用type:"dec.provider.tab_pane" 要使用Providers来获取el

其中自定义model是因为dec.provider.tab_pane中需要这两个content (上下文) 看代码


(function () {
    var e = BI.inherit(Fix.Model, {
        state: function () {
            return {//定义两个属性
                favorites: [],
                entries: []
            }
        },
        childContext: [ "favorites","entries"],//把这两个属性传到子控件的model中
        actions: {
            initFavs: function (callBack) {
                var self=this;
                this.model.loading = true;
                //初始化收藏和完整的所有的models这些都是dec.provider.tab_pane需要的
                Dec.Utils.getFavoritesList(function(e) {
                    self.model.favorites = BI.Services.getService("dec.service.frame.entry").normalizeEntries(e.data, false);
                    callBack();
                    self.model.loading = false;
                });
                Dec.Utils.getCompleteDirectoryTree(function(e) {
                    self.model.entries = BI.Tree.transformToTreeFormat(BI.Services.getService("dec.service.frame.entry").normalizeEntries(e.data))
                })
            }
        }
    });
    BI.model("dec.zxl.tabs", e)
})();


在这个代码中注意是调用Dec.Utils.getFavoritesListDec.Utils.getCompleteDirectoryTree获取初始化了 两个dec.provider.tab_pane 需要的属性,并通过childContext 传给子控件。

到这一步基本上就可以使用收藏和取消收藏的功能了。


  • No labels