xwaf 框架FAQ
胡乐秋 2020-04-28 17:40:36 1 new

xwaf框架FAQ

应用是什么

应用简称为app, 是由多个视图、模型、服务、模板、类型特征描述、菜单描述、资源描叙、插件等文件组成的单个独立应用模块,负责解决某一领域范围的问题。应用分为内部应用和专业应用

  • 内部应用位于"plugins/apps"子目录下,提供计算机领域的可重用组件,由平台开发者负责维护,一般应用开发者不应修改。
  • 专业应用位于"apps"子目录下, 与特定项目相关,由专业开发者负责维护.

单个应用内的模块之间可以互相依赖,应用之间则通过服务方式间接依赖,以保持单个应用的可插拔特性。

内部应用如何修改

  • 首先,除平台开发者外,内部应用不允许修改
  • 其次,外部应用可以通过插件的方式间接调整、扩展内部应用功能

例如:

  • 通过"home_sidebar_menu_plugin.xml"扩展内部应用菜单项
  • 通过"db_traits_plugin.xml"扩展、重载、移除类型特征描叙
  • 通过"dispatch"重载内部应用的缺省功能

服务发现

查看服务列表

服务注册

# -*- coding: utf-8 -*-

"""百度地图模型服务"""

from common.utils import dispatch
from map import model_baidu_map as model  #pylint: disable=import-error

######################################## 访问令牌服务 ########################################

@dispatch('get_baidu_ak')
def _() -> str:
    """得到百度地图访问码

    Returns:
        返回百度访问码

    """
    return model.get_baidu_ak()

服务调用

from common.utils import invoke

user_name = invoke('get_user_name')

禁用命令

通过在类型特征描述上定义"ui_disable_actions"可禁用缺省命令

<typetraits ... ui_disable_actions="cmd_add;..." ...>
    ...
</typetraits>

可禁用的预定义命令包括:

  • cmd_search: 搜索
  • cmd_add: 添加
  • cmd_remove: 删除
  • cmd_import: 导入
  • cmd_export: 导出
  • cmd_select_all: 全选
  • cmd_select_reverse: 反选
  • cmd_select_reset: 复位

添加命令组

通过重载"get_action_group_list_final"可增加命令组

@dispatch('/plan_main_point/show_list/get_action_group_list_final')
def _(type_name: str, action_type: str, type_traits_element: xml_element_type, result_group_list: list, context_dict: dict) -> None:  #pylint: disable=line-too-long, nused-argument
    """命令组列表完成事件

    重载本函数可添加修改命令组和命令

    Args:
        type_name: 类型名称
        action_type: 动作名称
        type_traits_element: 类型特征xml节点
        result_group_list: 命令组结果列表
        context_dict: 场景字典

    """
    click_url = "update_latitude_longitudes('{}', this)".format(type_name)
    result_group_list.insert(1, [{'id': 'cmd_update_latitude_longitudes', 'name': '更新经纬度坐标', 'onclick': click_url, 'class': 'btn-success'},])

添加内联脚本文件

通过重载"get_script_file_list_final"可增加内联脚本文件(脚本文件放置于该app的"templates"子目录下)

@dispatch('/plan_main_point/show_list/get_script_file_list_final')
def _(type_name: str, action_type: str, type_traits_element: xml_element_type, script_file_list: list, context_dict: dict) -> None:  #pylint: disable=unused-argument
    """内联脚本文件列表完成事件

    通过重载本函数, 提供指定类型、指定行为的内联脚本文件特化

    Args:
        type_name: 类型名称
        action_type: 行为名称
        type_traits_element: 类型特征xml节点
        context_dict: 场景字典

    """
    script_file_list.append('plan_main_point_show_list.js')