大道至简,新一代企业应用无栈开发

平台之上,一种语言,可视化、脚本化、全端一体化开发

查看方式

站点内容的查看方式

docutils document without title

每个文件夹、表单库、文件、表单有多种查看方式。

1   统一查看入口 zopen.views:index

可以统一通过 zopen.views:index 来访问内容的默认查看方式:

http://path/to/context/@zopen.views:index
  • 如果通过浏览器访问,通常会在主模板内容区展示

  • 如果是通过事件载入显示,通常会遮罩显示:

    ui.link('xxx').on('click', context, request, 'zopen.views:index')
    
  • 也可以强制直接在主模板内容区展示:

    ui.link('xxx').on('click', context, request, 'zopen.views:index', inline_=True)
    

    切换视图,或文件夹导航,都需要采用 inline 方式打开。

2   编写查看方式

2.1   查看方式命名约定

通过命名约定,来标志某个脚本是内容的查看方式,会出现在查看方式设置的可选新增中:

  1. 文件夹的查看方式: view_folder_XXX
  2. 表单库的查看方式: view_data_XXX
  3. 应用容器的查看方式:view_app_XXX
  4. 文件的查看方式: view_file_XXX
  5. 表单页的查看方式: view_dataitem_xxx

2.2   查看方式的使用场景

  1. 通过浏览器地址栏,需要使用站点模板

  2. 载入显示:需要根据是否带 inline_ 参数,来决定遮罩打开,或在主模板区域显示

    比如搜索结果、表单内容选择字段

  3. 直接在内嵌切换视图,或者导航查看( inline_=True

    如果inline方式查看,如果需要设置浏览历史:

    view.history.push_state(request, url=url)
    

3   设置默认查看方式

在站点点击某个内容,会采用的默认查看方式打开。

查看方式就是一个脚本,存放在容器的设置属性中。

  1. 容器的默认查看方式,存放在 default_view 中:

    default_view = container.settings['default_view']
    
  2. 文件的默认查看方式,存放在 file_default_view 中:

    file_default_view = container.settings.get('file_default_view',
            inherit=True, default='zopen.docs:view_file_default')
    
  3. 表单的默认查看方式,存放在 dataitem_default_view 中:

    dataitem_default_view = container.settings.get('dataitem_default_view',
            inherit=True, default='zopen.datacontainer:view_dataitem_default')
    

4   容器的可选查看方式

除了默认查看方式,容器也可以选择使用其他查看方式打开。

可选查看方式,也保存在容器的 settings 属性中:

container_views = container.settings['all_views']
file_views = container.settings['file_views']
dataitem_views = container.settings['dataitem_views']

5   二级导航菜单 on_nav_expand

不论是站点栏目,还是工作台栏目,都可展开。

如果需要点开显示二级栏目,需要设置指定的某个展开脚本:

>>> container.settings['on_nav_expand']
'xxx.xxx:xxx'

这个脚本返回如下数据结构:

[
    {
        'title': f.md['title'] or f.name,
        'click': f.absolute_url(request) + '/@@simple-content',
        'expand': f.absolute_url(request) + '/@zopen.desks:update_left',
        'id': root.object_uid(f),
        'icon': 'folder-o',
        'href': '',
    }
]

导航展开返回数据示例说明:

[
    {
      'type': 'link', # 链接类型
      'title':'sub item 1',
      'icon':'xx',
      'href':'http://xxx', # 正常链接
    },
    {
      'type': 'link', # 链接类型
      'title':'sub item 2',
      'icon':'xx',
      'click':'http://.../@script', # ajax调用脚本 等于 on('click', ‘to_scirpt’)
    },
    {
        'type': 'separator', # 分割线类型
    },
    {
        'type': 'text', # 文字类型
        'title': 'some title',
    }
]

工作台展开返回数据说明,目前只支持生成链接类型:

[
    {
        'type': 'link', # 链接类型
        'title': 'sub item 1',
        'icon': 'xx',
        'href': 'http://xxx', # 正常链接
        'click': 'http://.../@script', # ajax调用脚本
        'script': 'to_script', # 注意当该栏目没有默认视图时,首个子树需要指定返回内容的脚本
    },
]