tokenpocket钱包app官方下载苹果|wt
百度知道 - 信息提示
百度知道 - 信息提示
百度首页
商城
注册
登录
网页
资讯
视频
图片
知道
文库
贴吧采购
地图更多
搜索答案
我要提问
百度知道>提示信息
知道宝贝找不到问题了>_
该问题可能已经失效。返回首页
15秒以后自动返回
帮助
| 意见反馈
| 投诉举报
京ICP证030173号-1 京网文【2023】1034-029号 ©2024Baidu 使用百度前必读 | 知道协议
文曄(文晔)科技 |
文曄(文晔)科技 |
English (英语)
繁體中文 (繁体中文)
简体中文
||
文曄(文晔)科技
关于文晔
公司简介
组织架构与经营团队
核心价值与经营理念
历年获奖与评比
文晔教育基金会
远乡视讯学堂
远乡闪闪
公司据点
联络我们
代理产品线
投资人关系
财务资讯
每月营业额报告
每季营运报告
财务报告
公司年报
股东专栏
股东会资讯
历年股利分派
股价资讯
重大讯息与公告
联络人
公司治理
公司治理架构
董事会
董事会组织与职责
董事会重大决议
功能性委员会
审计委员会
薪资报酬委员会
提名委员会
永续发展委员会
重要组织规章
风险管理
营运风险
财务风险
信息安全风险
环境风险
智慧财产管理
内部稽核
利害关系人专区
文晔治理讲座系列
文晔治理讲座系列一
文晔治理讲座系列二
文晔治理讲座系列三
文晔治理讲座系列四
文晔治理讲座系列五
文晔治理讲座系列六
文晔治理讲座系列七
文晔治理讲座系列八
企业永续
永续發展政策与倡议
董事长的话
环境
社会
治理
企业永续报告书
新闻中心
菁英招募
人员招募
培育与发展
薪酬与福利
环境与安全
工作机会
MENU
CLOSE
back
专注本业,超越不凡
推动更智慧便捷的世界
电子元件到终端产品的推手
值得你托付的通路伙伴
强化公司治理机制
奠定永续经营基石
推广多元学习,回馈社会
关怀教育弱势,美好世界
加入文晔团队,精彩人生
携手创造无限可能
专注本业,超越不凡
推动更智慧便捷的世界
电子元件到终端产品的推手
值得你托付的通路伙伴
强化公司治理机制
奠定永续经营基石
推广多元学习,回馈社会
关怀教育弱势,美好世界
加入文晔团队,精彩人生
携手创造无限可能
终端应用
工控/安防/家电车用电子医疗电子
电脑网路/行动通讯消费性电子/影像/多媒体
年度焦点数据
凭着多年经验与努力
2023年缔造多项公司记录
代理 60,000+种零组件
服务 10,000+位客户
处理 700,000+笔订单
出货 25,000,000,000+颗晶片
创造年营收新台币 5,945亿 元
近期新闻
文晔科技1月份自结合并营收约新台币737亿元 (2/7/2024)文曄科技召開2023年第四季法人說明會 (1/31/2024)文晔科技12月份自结合并营收约新台币588亿元,刷新季度、年度营收历史纪录 (1/9/2024)文晔科技11月份自结合并营收约新台币633亿元 (12/8/2023)文晔科技10月份自结合并营收约新台币676亿元,刷新单月营收历史纪录 (11/9/2023)
Copyright© WT Microelectronics Co., Ltd., All Rights Reserved.
首页
联络我们
网站地图
頁尾選單 - 簡體
新生代 Windows 终端:Windows Terminal 的全面自定义 - 少数派
新生代 Windows 终端:Windows Terminal 的全面自定义 - 少数派
PRIMEMatrix栏目Pi Store更多 无需申请,自由写作 任何用户都可使用写作功能。成功发布 3 篇符合基本规则的内容,可成为正式作者。了解更多退出登录反馈PRIMEMatrix栏目Pi Store更多 新生代 Windows 终端:Windows Terminal 的全面自定义主作者关注SpencerWoo少数派作者少数派作者 spencer.wushangbo@gmail.com SpencerWoo关注SpencerWoo少数派作者少数派作者 spencer.wushangbo@gmail.com 联合作者关注SpencerWoo少数派作者少数派作者 spencer.wushangbo@gmail.com SpencerWoo关注SpencerWoo少数派作者少数派作者 spencer.wushangbo@gmail.com 2020 年 03 月 10 日 新晋 Windows 终端模拟器:Windows Terminal,自发布以来就备受开发者的喜爱,并与 WSL 一起,让不少先前非 Linux 不用的开发者朋友们向 Windows 倾斜。Windows Terminal 不仅开源免费,还拥有现代化的界面、完整的字体字符渲染机制(包括 Emoji)、GPU 加速和 Fluent 设计风格。这些都让 Windows Terminal 成为 Windows 平台最先进的终端模拟器,力压一众第三方终端以及 Windows 自带的默认终端。
推荐阅读:告别 Windows 终端的难看难用,从改造 PowerShell 的外观开始
现代化 UI、丰富的自定义功能与设计的 Windows Terminal事实上,Windows Terminal 不仅速度快、设计美,还有众多可自定义的 UI 元素、快捷键与实用功能。这篇文章中,我希望在 Windows Terminal 1.0 发布的前夕,详细介绍一下 Windows Terminal 的设置与自定义方法,并和大家分享一些让 Windows Terminal 实用且美丽起来的小技巧。
Windows Terminal 的配置文件
首先,我们进入 Windows Terminal 的设置文件。在 Windows Terminal 的下拉菜单中,选择 Settings(或使用快捷键 Ctrl + ,),这一操作会使用你系统默认的文本编辑器打开 Windows Terminal 的配置文件。
点击 Settings 进入 Windows Terminal 的设置
Windows Terminal 的配置文件是一个 JSON 格式的文件,我们会在其中定义全部 Windows Terminal 的属性。简单来讲,这个配置文件包含了如下的几个部分:
全局属性:位于 JSON 最外侧,包含有设置亮暗主题、默认 Profile 等项目的配置。
环境入口 profiles:一个列表,其中包含有 Windows Terminal 下拉菜单中唤起的各种环境(比如打开 PowerShell 环境、WSL 环境或 SSH 至远程服务器的环境……)与各种环境里 Windows Terminal 的显示方案(比如字体、背景、色彩方案等)。
配色主题 schemes:一个配色方案列表,其中包含有 Windows Terminal 在上一项「环境入口」中可以调用的「色彩主题」。
快捷键绑定 keybindings:自定义快捷键。
Windows Terminal: profiles.json 配置文件的格式
熟悉了 Windows Terminal 配置文件的各项含义之后,我们即可开始对 Windows Terminal 的各项属性进行配置。
在配置文件中对 Windows Terminal 进行自定义
全局属性的配置
设置 Windows Terminal 从设置其全局属性开始,也就是它的配置文件 profiles.json 里面最开始的部分。在这里我们可以定义:
Terminal 亮暗主题设置 "requestedTheme":可以为 "system"(跟随系统)、"light" 或 "dark"
Terminal 初始大小:"initialCols" 和 "initialRows"
Terminal 的默认配置文件:设置打开自动进入的环境(通过 GUID 唯一标识码来识别环境)
……
之后,就是三个包含二级设置项目:「环境入口」、「配色主题」和「快捷键绑定」的设置。我们依次进行介绍。
设置 Windows Terminal 的环境入口
下拉菜单是 Windows Terminal 唤起各个环境的入口。我们通过点击「下拉菜单」的各个选项,即可唤起不同的 Windows Terminal 环境。
下拉菜单中的环境入口
默认情况下,Windows Terminal 已经为我们配置了本机安装的全部命令行环境:包括 PowerShell 环境、cmd 环境以及自家云服务 Azure Cloud Shell 入口。如果你安装了 WSL(Windows Subsystem for Linux),那么 Windows Terminal 也同样将这一环境自动探测并添加。这些环境,就是 Windows Terminal 配置文件中 "profiles" 属性列表里面的内容,我们同样可以在这一列表中:
自定义某一环境的性质
添加我们自己的环境或命令
自定义某一个环境的配置
Windows Terminal 的环境配置中可以设置其调用命令(commandline)、字体(fontFace)、颜色方案(colorScheme)、背景颜色(background)与背景图片(backgroundImage)等等。这里我想重点介绍一下为 Windows Terminal 一个特定环境的背景进行设置的方法。
Windows Terminal 的背景可以是一个纯色,也可以是一张高清壁纸、GIF 动图等等。如果是纯色的背景,在未经设置的情况下这一颜色与你环境所定义的配色方案的颜色一致,你也可以通过控制 background 这一属性来更换颜色。比如这里我想让 PowerShell 的背景带有一抹独特的「蓝色」,即可这一进行设置:
// "profiles": [ ... ] 项目中 PowerShell 环境的配置
{
"background": "#013456",
"acrylicOpacity": 0.8,
"useAcrylic": true,
}
其中:
"background" 与后面的 HEX 颜色即定义了背景颜色
"useAcrylic" 表示我们背景会添加 Windows Fluent 设计风格的亚克力着色
"acrylicOpacity" 定义了亚克力效果的透明度
带有 PowerShell 特色蓝与亚克力透明效果的背景设置
当然,背景的设置不止步于此,我们可以直接一张图片作为 Windows Terminal 的背景,不仅可以用于装饰,还可以用于提醒我们当前所在环境。
首先我们需要进入 Windows Terminal 的素材文件夹,也就是 Windows Terminal 安装目录 C:\Users\{用户名}\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe 里面的 RoamingState 这一文件夹,将挑选好的「壁纸」背景放入其中,并记下其文件名。比如,这里我挑选了一张非常有 Windows 特色的壁纸(下载:Untitled Goose Wallpaper),将之命名为 goose.png:
Windows 特色桌面壁纸
之后,在 Windows Terminal PowerShell 的配置模块,我们加入如下的内容,依次定义:
"backgroundImage":设置背景图片为 goose.png,具体素材路径的语法格式为 ms-appdata:///roaming/{图片名}
"backgroundImageStretchMode":设置背景图片伸缩模式为「按比例放大」
"backgroundImageOpacity":设置背景图片透明度为 0.6
{
"backgroundImage": "ms-appdata:///roaming/goose.png",
"backgroundImageStretchMode": "uniformToFill",
"backgroundImageOpacity": 0.6
}
PowerShell 环境背景设置
这样,我们就得到了一个非常 Windows 风格的 PowerShell 终端环境:
Windows 极了!
当然,我们同样可以为其他环境配置相应的背景图案。为 Windows Terminal 的环境设置背景,还可以提示我们当前所处的位置,防止在生产环境做出错误的操作等。
WSL - Ubuntu 环境 / Windows 环境
启动环境时自动运行命令
Windows Terminal 唤起环境时,实际上是通过执行环境入口配置里面 commandline 这一属性所定义的命令,来进入相应的环境。那么,我们可以在点击 Windows Terminal 下拉菜单唤起一个环境时,执行我们自定义的一个命令。这一命令可以是 SSH 登录远程服务器,可以是调用其他系统环境(比如 Anaconda 环境)等等。我们以 SSH 远程登录为例子,具体介绍如何利用 commandline 这一属性。
默认最简单的环境就是 Windows Terminal 的 cmd 环境了,其 profile 定义为:
{
// Make changes here to the cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe"
}
可以看到,事实上这一环境仅定义了 "commandline": "cmd.exe",也就是在 Windows Terminal 唤起环境时执行 cmd.exe 这一命令,从而自动进入 cmd 环境。于是,我们只要添加一个执行 SSH 登录服务器的命令的环境配置,即可自动进入远程服务器环境。比如,我们登录服务器的命令是非常简单的:
ssh root@10.0.0.1
即:在 PowerShell 环境下,执行上述命令,以 root 身份登录内网 IP 为 10.0.0.12 的服务器(手动输入密码)。那么我们即可这样添加执行这一命令的 Windows Terminal 环境入口:
使用 在线 UUID 生成器 生成独一无二的 UUID:
生成 UUID
在 "profiles" 列表中新建一个最简的环境入口配置,填写 UUID、环境名称、以及具体命令(注意这里我们需要指定用 powershell.exe,否则可能默认使用 cmd 环境):
{
"guid": "{a060905f-d089-43d9-9422-cd748e7f0230}",
"name": "SSH",
"commandline": "powershell.exe ssh root@10.0.0.1"
}
为了更加美观实用,我们还可以添加一个图标。我事先准备了一个 GPU 的图标并将之命名为 gpu.png(因为我这台内网服务器是学校训练用的 GPU 服务器),将图标同样放置在 Windows Terminal 素材文件夹 RoamingState 里,并向刚刚创建的环境入口配置中填入图标的定义:
{
"icon": "ms-appdata:///roaming/gpu.png"
}
自定义 profile 与对应图标
这样,我们就可以直接唤起这一命令,执行 SSH 登录,进入远程服务器环境。
直接点击标签页即可执行相应的登录命令
想要寻找更多图标的同学,可以在 icons8、iconfont 等网站上进行搜索,特别是 icons8 的图标,非常精致,且同一类别风格一致,96px 的尺寸也足够用于 Windows Terminal 上,推荐大家使用!
另外,如果你日常使用的环境是 WSL 环境并使用 mosh 进行 SSH 登录(因为 mosh 并不支持 Windows),你同样可以在 commandline 一处将命令设置为:
{
"commandline": "wsl.exe mosh root@10.0.0.1"
}
这样依然可以正常执行相应的操作:进入 WSL 环境 » 执行 Linux 独占工具。
添加额外的配色主题
Windows Terminal 的色彩主题同样是 JSON 文件,我们可以在上文介绍的 profiles.json 文件的 schemes 属性处,添加自定义的色彩主题。可能是全网最丰富的终端配色方案集合:iTerm2 Color Schemes,就包含有为 Windows Terminal 提供的 200 余中色彩方案,位于 windowsterminal 文件夹中。(主题的样式预览可以在 iTerm2 Color Scheme 的官网 查看。)
iTerm2 Color Scheme 中 Windows Terminal 色彩主题
iTerm2 Color Scheme 项目中的 Windows Terminal 主题均为独立的 JSON 文件,我们挑选好想要添加的主题之后,点击打开对应的主题文件,复制整个 JSON 文件的内容,并粘贴到 Windows Terminal 的配置文件的 schemes 主题文件列表之中,即可使用这一色彩主题。
将色彩主题的 JSON 内容粘贴到 schemes 属性之中
之后,我们在 Windows Terminal 配置文件里各个环境入口的配置中,定义使用相应的「色彩主题」,即可让这一环境的配色方案生效:
定义一个 profile 使用的配色主题
自定义 Windows Terminal 的快捷键
在 Windows Terminal 的配置文件末尾,我们可以在 "keybindings": [] 里定义其快捷键绑定。默认的 Windows Terminal 快捷键实际上就非常好用,可以用来快速开启某个环境、实施分屏操作等。这里举几个比较典型的、无需设置即可使用的例子:
Ctrl + Shift + T 打开新标签页
Ctrl + Shift + 1 进入配置文件中定义的第一个环境(Ctrl + Shift + 2 进入第二个,以此类推)
Alt + Shift + - 横向分屏;Alt + Shift + + 纵向分屏
Ctrl + + 放大、Ctrl + - 缩小、Ctrl + 0 恢复默认缩放比例
……
我们可以在按住 Alt 的时候,点击 Windows Terminal 下拉菜单的「设置」,进入 Windows Terminal 自动生成的默认配置文件(不要更改这一文件,更改也不会有用的!)。在文件的最后,有 Windows Terminal 默认快捷键绑定可以参考:
Windows Terminal 默认快捷键绑定
如何更快地进入工作环境
从 Windows Terminal v0.9 版本开始,Windows Terminal 支持了「命令行参数」。也就是说,我们现在可以用 wt -xxx 的命令来唤起 Windows Terminal 打开不同的环境、进入特定的目录,设置直接设置分屏、同时打开多个标签页等。
举几个比较常用的「命令行参数」的例子:
在当前路径下进入默认的 Windows Terminal 环境:
wt -d .
使用名为 Ubuntu 的 WSL 环境打开当前路径:
wt -p "Ubuntu" -d .
垂直分屏打开 PowerShell 与 WSL 环境:
wt -p "Windows PowerShell" -d . ; split-pane -V -p "Ubuntu" -d .
使用「命令行参数」唤起 Windows Terminal 的特定环境
注:完整的 Windows Terminal 命令行参数文档位于 Using the wt.exe Commandline
你可能也发现了,上面的命令有时候并不简单,进入一个环境可能需要重复手动输入复杂的指令。那么,如何才能更快速的唤起某个 Windows Terminal 状态呢?
我们都知道 Windows「右键菜单」的快捷之处:快速在 Windows 自带终端中打开当前目录、快速创建文件夹、快速批量压缩文件……Windows 终极效率利器 Quicker,就是利用「右键菜单」的思想,设计了「全局右键菜单」。
关联阅读:Windows 平台的快捷指令:Quicker 使用详解
利用 Quicker,我们就可以把 Windows Terminal 命令放进右键菜单里。下面我以「在当前目录下打开 Windows Terminal 的默认环境」这个动作为例子,为大家介绍如何使用 Quicker 自定义打开 Windows Terminal 的方式。
实际上,从 Quicker 唤起 Windows Terminal 就是使用 Quicker 在当前文件夹下执行这一命令:
wt -d .
默认情况下,如果我们直接用 Quicker 的「执行动作」这一简单动作直接运行 wt -d .,由于 Quicker 尚未获取到当前命令的执行环境,因此它会按其默认环境执行这一命令,我们也就只能进入默认的 Windows 根目录下。我们需要先获取到当前资源管理器所在路径,之后将这一路径传递给「运行或打开」,将动作的「工作路径」进行设置,才能正确执行命令。
使用 Quicker 自定义组合动作在当前文件夹下唤起 Windows Termina
使用这一动作,我们可以达到类似下面演示的效果:
Quicker 动作:在当前文件夹下打开 Windows Termina
这一动作我已经发布在 Quicker 的动作库中了:WT Here,感兴趣的同学可以前往添加下载。发布的动作中我还设置了一个 args 变量,方便你配置自己的命令行参数。你也可以直接根据我的思路,自行进行动作制作。我觉得使用 Quicker 进行「右键菜单」的定义,比直接修改「注册表」来添加右键菜单的动作要方便得多,且更加安全。
小结
Windows Terminal 当属 Windows 上第一个兼顾速度、界面与可定制性的终端模拟器。作为微软自家出品的 Windows 终端软件,「亲儿子」的待遇和体验就是不一般。Windows Terminal 的出现可以说是直接拯救了多年来糟糕的 Windows 命令行体验,让 Windows 在命令行环境下的操作感受能够和他 UNIX 的朋友们比一比。相信,在接下来的版本迭代中,Windows Terminal 会随着设置 UI 界面化、插件系统的加入……而越来越强大。希望这篇文章能够让你重新体验到 Windows 命令行环境的强大,提升在 Windows 上的工作、开发效率。感谢阅读。
> 下载少数派 客户端、关注 少数派公众号,了解更多 Windows 技巧 ⚙️
> 特惠、好用的硬件产品,尽在 少数派 sspai 官方店铺 29982扫码分享 本文责编:@文刀漢三© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。 #热门文章
#开发者
#技巧
#Windows
299 等 299 人为本文章充电 扫码分享
举报本文章
举报 SpencerWoo少数派作者
spencer.wushangbo@gmail.com
关注
全部评论(82)
请在登录后评论...
更多
推荐阅读
App 内打开 请绑定手机号码取消 前往绑定 关注公众号 sspaime 下载 App 联系我们 商务合作 关于我们 用户协议 常见问题 © 2013-2024 少数派 | 粤ICP备09128966号-4 | 粤B2-20211534© 2013-2024 少数派粤ICP备09128966号-4 | 粤B2-20211534 确定
Wt快速入门教程[中英文]-CSDN博客
>Wt快速入门教程[中英文]-CSDN博客
Wt快速入门教程[中英文]
最新推荐文章于 2022-12-09 21:25:06 发布
weixin_33937499
最新推荐文章于 2022-12-09 21:25:06 发布
阅读量1.6k
收藏
8
点赞数
1
文章标签:
javascript
操作系统
c/c++
ViewUI
原文链接:https://my.oschina.net/zhmsong/blog/39304
版权
2019独角兽企业重金招聘Python工程师标准>>>
【Wt快速入门教程】
A hands-on introduction to Wt
http://www.webtoolkit.eu/wt/doc/tutorial/wt.html
Table of Contents 【
内容】
1. Introduction 【1.简介】
2. Main components 【2.主要内容】
2.1. Widgets 【2.1部件】
2.2. Session management and lifetime 【2.2会话管理和生存周期】
2.3. Deployment 【2.3部署】
3. Hello, Wt 【3.HelloWt例子】
4. Hangman 【4.Hangman例子】
4.1. A first custom widget 【4.1第一个自定义部件】
4.2. Unleashing (some of) Wt’s power 【4.2进一步显示Wt的能量】
4.3. Internal paths 【4.3内部路径】
5. Summary 【5.总结】
作者:{
Pieter Libin <
pieter@emweb.be>
Koen Deforche <
koen@emweb.be>
Wim Dumon
For Wt 3.2.0 (December 5 2011) 【适用于Wt-3.2.0】
1. Introduction
Wt is a C++ library for developing web applications. Admitted, C++ doesn’t come to mind as the first choice for a programming language when one talks about web development. Web development is usually associated with scripting languages, and is usually implemented at the level of generating responses for incoming requests. Since both requests and responses are text encodings, web programming is ultimately a text processing task, and thus conveniently expressed in a scripting language.
【Wt是开发Web应用的C++库。不可否认,当我们讨论Web应用开发时C++从来不是第一选择。Web应用开发总是和脚本语言关联在一起,也通常是在接受请求/生成应答层面实现。因为请求与应答采用文本编码,所以,Web编程最终成为一种文本处理,也就非常方便地为脚本语言所表达。】
Yet, from a functional point of view, and as a programming task, a modern web application resembles more a desktop application: it is highly interactive and no longer organized in pages (perhaps still conceptually, but not physically). Interaction with the server happens more and more in the background and not with complete page refreshes. Indeed, the browser is being transformed into a platform for applications where users interact with data and more often than not with each other.
【然而,从功能上看,作为一项编程任务,现代Web开发更像是桌面应用:高度交互且再也不以页面为组织单位(或许概念上是,但实际上并非以页面存储)。与服务器的交互越来越多地发生在{background},且不会伴随有页面的刷新。另外,浏览器也变成了应用的平台,在这个平台上用户更多地与数据交互,而不是用户间的直接交互{more often than not with each other}。】
While some developers choose to implement the application in JavaScript and use a client-server protocol to access server-side resources, this has a number of inherent downsides. You need to let go of static typing (or add another layer, such as GWT). Type safety, enforced by a compiler, is invaluable as a project grows in complexity and number of developers. Moreover, you need to design a client-server protocol and minimize communication and associated round-trip latencies. Finally, this approach cannot work for applications that need to meet accessibility guidelines or need to be search engine optimized and thus require a HTML-only version of the application. Wt, as a server-side solution, overcomes these problems, and with little to no interactivity loss compared to a JavaScript application.
【当前程序员们通常会选择JavaScript实现应用,并使用客户端-服务器端协议访问服务器资源,这种方案存在一些先天不足{inherent downsides}[1],比如你只得放弃静态类型转换(当然可以借助 Google Web Toolkit 避过)。但是,编译器强制保证的类型安全是无价的,特别是当项目越来越复杂,涉及开发人员越来越多时。进一步,用JavaScript时还必须涉及客户端-服务器端协议,最小化通讯延迟时间。最后,JavaScript在可访问性(浏览器兼容性低)和SEO优化方面不能满足需要,到最后只能搞出应用的HTML版本来应对。Wt,作为服务器端解决方案,克服了以上问题,{with little to no interactivity loss compared to a JavaScript application}。】
Wt’s main advantage over other server-side approaches is its widget abstraction. An application is defined as a hierarchy of widgets. Some of these widgets are generic and provided by the library (like push buttons, line edits, table views, …), and others are specialized for a particular application (e.g. an entire blog widget). A widget encapsulates the view and behavior aspects, consumes and produces events and also participates in URL handling and may interact with other HTTP resources. More often than not, a widget delegates the actual "logic" to a model, a layering approach typically known as MVC. A widget, unlike a page or “partlet”, is a truly reusable, customizable and extensible building block (as a poster-child of Object-Oriented Programming) for a modern web application. The actual request handling and rendering is abstracted, with as benefit that a full page rendering model (plain HTML) or incremental updates (Ajax/WebSockets) can be used depending on configuration and browser properties.
【Wt的主要优点是 部件抽象{widget abstraction}。Wt应用被定义为一种基于部件的层级结构。有的部件是Wt内置的,如按钮、文本框、线框、表格视图等,有的则是为特别应用开发的,如博客部件。部件封装了视图和行为,生成和处理时间,同时参与URL处理及其他HTTP资源交互。通常,部件将代理执行实际的模型“逻辑”,实际是一种MVC模式。部件,不是通常说的页面或页应用一部分{partlet},而是一种真正能复用的、可定制的、可扩展的构建模块(OOP的典型模式),专门为现代Web应用开发。Wt将实际的请求处理和渲染过程予以抽象,还可以根据实际配置和浏览器特性充分利用全页面渲染模型(面向HTML)和增量渲染(Ajax/WebSockets)的优点。】
Although implemented in C++, Wt’s main focus or novelty is not its performance, but its focus on developing maintainable applications and its extensive library of built-in widgets. But because it is popular and widely used in embedded systems, you will find that performance and foot-print has been optimized too, by virtue of a no-nonsense API, thoughtful architecture, and C++ …
【虽然Wt用C++实现,但Wt的主要目的或创新点却不是它的性能,而是为了解决开发可维护性应用,以及提供一定数量的内置部件库。同时,Wt在嵌入式系统开发中很流行,所以可以发现Wt应用的性能和内存使用已经优化。以上这些,都得益于Wt高效的API、精心设计的架构、以及C++的一切优点。】
In this tutorial, we will use two small programs to illustrate how to use Wt to create web applications. After this tutorial you should have a good grasp of what the possibilities are, how Wt applications are built, and how it offers you a tool to manage complexity.
【在这个教程中,我们使用了两个小程序来展示如何使用Wt创建Web应用,之后,你就能明白使用Wt的可能性、以及它在管理复杂应用时带来的好处。】
The first application is the obligatory Hello World application and introduces two key concepts of the library: creating and updating a widget tree and reacting to user input. The second, slightly larger application is the classic hangman game. Both applications are included in the Wt source distribution.
【第一个应用是 Hello World,这是必须的:-),它引入了Wt库的两个基本概念:创建和更新部件树、对用户输入作出反应。第二个应用,是稍微大点的应用,Hangman。两个应用的源代码都在Wt的发行版中。】
But before we dive in, let’s quickly go over the main concepts of the library.
【开始之前,让我们先了解一下Wt库的基本概念。】
2. Main components
2.1. Widgets【部件】
The user-interface, rendered in a browser window, is specified by creating and maintaining a widget tree. Every widgetcorresponds to a rectangular part of the user-interface, and manages its contents and behavior. At the heart, the library takes charge of two tasks within a single session: (1) rendering this widget tree as HTML/JavaScript in the web browser, and tracking changes as incremental updates, and (2) synchronizing user input and relaying events from the browser to these widgets.
【Wt中,将浏览器窗口渲染用户界面,描述为,创建和维护部件树。】
【每个部件对应于用户界面的一个矩形部分,同时管理它的内容和行为。在一个会话中,Wt核心库有两个主要任务:(1)在浏览器中以HTML或JavaScript方式渲染部件树,并以增量渲染的方式追踪部件树的变化;(2)从浏览器到部件之间同步用户输入和广播事件。】
Because of the clear separation between user-interface specification using the widget tree and the rendering of the tree, the library implements several optimizations for rendering when Ajax is available. Not only can the library update the interface incrementally, there are other tricks such as only rendering visible widget changes during in response to an event (or initial loading), and in the background render changes to hidden widgets. As a consequence, both the initial response is optimized and the appearance of subsequent widgets appears snappy.
【Wt中将用户界面的表达(使用部件树)和部件树的渲染明确分开了,这样,Wt实现了很多针对Ajax渲染的优化。不仅能够增量渲染界面,而且还使用了很多技巧,如对可见部件的渲染安排在初始载入时或明确有响应事件时,而对不可见的部件也能够事先渲染,这样一来,不可见部件树的显示就变得很快。】
2.2. Session management and lifetime【会话管理和生存周期】
Another aspect that is entirely handled by the library is session management. For every new session, which corresponds to a new user accessing your web application, the library creates a new WApplication object. As a developer, you can implement an application pretty much as a single-user application, unless you let users interact with a common component (such as a database) or with each other, for which standard data-sharing mechanisms must be used.
【另一个完全由Wt库处理的是会话管理。对于每个新会话(对应于一个新的用户访问Web应用),Wt都创建一个新的 WApplication对象。作为开发者,你可以将其实现为单用户应用,也可以实现为多用户交互应用,当然必须有数据库或其他标准数据分享机制。】
Depending on the deployment model, the library will map sessions onto dedicated or shared processes. When using dedicated processes a new process is created for every distinct session, this provides the kernel-level isolation of different sessions, which may be useful for highly security sensitive applications. When using shared processes new sessions are allocated randomly to one of the processes available to the library. This reduces the danger for DoS attacks, but requires more careful programming as memory corruption affects all sessions in a single process, and sessions are not isolated by any other mechanism but correct programming.
【根据部署模式的不同,Wt将会话映射到独享进程或共享进程上。当使用独享进程时,Wt为每个独立的会话创建一个新的进程,这种方式提供了kernel级的会话隔离,适用于安全级别要求很高的应用。当使用共享进程时,新的会话将被随机分配给某个进程,这种方式降低了Dos攻击的风险,但需要细心编程,因为一旦某个会话崩溃将影响它所在进程中的所有会话,并且该进程中的会话间没有任何机制保证其隔离,当然正确编程是肯定没有问题的。】
Wt uses a keep-alive protocol between client and server to determine session lifetime. As long as the web page is displayed in the user’s browser, the session is kept alive. When the user closes his window, navigates away, or after a timeout when connectivity is lost, the session gets terminated. When a session is terminated, the application object together with the entire widget tree is deleted, therefore you should release resources held by your widgets or application in the destructors of these objects.
【Wt在客户端和服务器端使用keep-alive协议决定会话的生存周期。只要页面在浏览器中显示则该会话就保持存在。而当用户关闭窗口或通过导航离开此页面或者页面过期失去连接,那么会话将终止。当会话终止时,Web应用对象以及整个部件树都将被删除,因此此时你应该保证释放部件树或Wt应用所拥有的资源,在Wt中使用C++的析构函数即可。】
2.3. Deployment【部署】
Several deployment options are available:
【Wt有以下几种部署方案】
The wthttp connector library implements a webserver that implements HTTP(S) and WebSockets. It is not only convenient during development, but also an efficient solution for deployments ranging from small embedded systems or mobile devices to multi-server deployments. 【wthttp连接器:这是Wt库自有的一种Web服务器,实现了HTTP(S)和WebSockets。wthttp不仅部署简单,而且是一种高效的服务器部署解决方案,范围包括小的嵌入式系统、移动设备、或多服务器部署。】 The wtfcgi connector library implements the FastCGI protocol. It allows a Wt application to be integrated into an existing web server (such as Apache, Lighttpd or Nginx). 【wtfcgi连接器:实现了FastCGI协议。允许将Wt应用整合进现有的Web服务器(如Apache,Lighttpd或Nginx。)】 The wtisapi connector library implements the ISAPI protocol. On Windows platforms, it allows a Wt application to integrate into Microsoft Internet Information Server (IIS). 【wtisapi连接器:实现了ISAPI协议,在Windows平台上,允许Wt应用整合进MS-IIS服务器。】
3. Hello, Wt【Hello,Wt 例子】
In this example, we show an application that prompts the user for his name. When he pushes the button, the greeting text is updated based on the name that was entered.
【这个例子中,我们要显示一个线框部件(nameEdit_),让用户输入姓名;当用户点击按钮部件(button)时,问候语部件(greeting_)将根据用户输入被更新(渲染)。】
A new session starts with creating an instance of class WApplication. This object manages the root of the widget tree and contains other session information, such as the connected browser’s capabilities.
【新会话开始于WApplication对象实例的创建,该对象管理着部件树的根,并包含有会话的相关信息,比如用户使用浏览器的具体信息等。】
A complete "Hello world" application
【
下面是 “Hello world”应用的完整代码】
#include
#include
#include
#include
#include
#include
class HelloApplication : public Wt::WApplication
{
public:
HelloApplication(const Wt::WEnvironment& env);
private:
Wt::WLineEdit *nameEdit_;
Wt::WText *greeting_;
void greet();
};
HelloApplication::HelloApplication(const Wt::WEnvironment& env)
: Wt::WApplication(env)
{
setTitle("Hello world");
root()->addWidget(new Wt::WText("Your name, please ? "));
nameEdit_ = new Wt::WLineEdit(root());
Wt::WPushButton *button = new Wt::WPushButton("Greet me.", root());
root()->addWidget(new Wt::WBreak());
greeting_ = new Wt::WText(root());
button->clicked().connect(this, &HelloApplication::greet);
}
void HelloApplication::greet()
{
greeting_->setText("Hello there, " + nameEdit_->text());
}
Wt::WApplication *createApplication(const Wt::WEnvironment& env)
{
return new HelloApplication(env);
}
int main(int argc, char **argv)
{
return Wt::WRun(argc, argv, &createApplication);
}
You can build and run this application locally, if you want. All you need to do is compile the code above and link against the Wt library (libwt) and built-in HTTP server (libwthttp).
【
你可以直接编译和运行这个例子的代码,并连接到libwt和libwthttp。】
On UNIX-like systems, you could do the following:
【UNIX类似系统上,你可以照下面的方式进行:】
$ g++ -o hello hello.cc -lwthttp -lwt
$ ./hello --docroot . --http-address 0.0.0.0 --http-port 9090
Let’s start with the last part of the application, the main() function.
【下面让我们先来分析下 main() 函数。】
In the main() function, we call WRun() to start the application server. This method will return when the application server shuts down (by catching the KILL signal or Windows equivalent).
【在main()函数中,我们调用 WRun()来启动应用服务器{application server},WRun() 方法将在应用服务器关闭时返回(通过捕捉KILL信号实现)。】
Inside WRun()【
WRun内部】
WRun() is actually a convenience function which creates and configures a WServer instance. If you want more control, for example if you have multiple “entry points”, or want to control the server starting and stopping, you can use the WServer API directly instead.
【WRun() 实际上是一种简易函数{convenience function},用于创建和配置WServer实例。如果你需要对其有更多的控制,比如说你希望有多个“进入点”{entry points},或者希望控制服务器的启动和关闭,那么你可以使用WServer 提供的API,而不是直接使用WRun()。】
The WRun() function passes argc and argv (which for some connectors such as the built-in webserver configures the server), and accepts a function object as last argument. This function will be called when a new session is started and returns a new WApplication instance for that session. This function, in turn, has as input a
WEnvironment object, and this object can be used to customize the application or authenticate the user.
【
WRun()函数传递 argc 和 argv 参数(用于连接器配置服务器,如内置wthttp),同时最后一个参数接受一个函数对象{createApplication},creatApplication() 函数将在新会话启动时调用,并为会话返回一个WApplication实例。createApplication()函数有一个输入参数 WEnvironment(env)对象,env可以用来定制应用或认证用户身份。】
Wt文档中的 Wt::WServer::WRun(int argc, char *argv[], ApplicationCreator createApplication) 定义,其中ApplicationCreator 的类型定义为 typedef boost::function
The example instantiates four widgets into the application’s root container: a text ("Your name, please?"), a line edit (nameEdit_), an empty text (greeting_) and a button (button). These three types of widgets are generic widgets provided by the library, and map directly on native HTML elements. In the hangman example below we will see how other custom and more specialized widgets are used in exactly the same way.
【
这个例子实例化4个部件,并放入应用的根容器中,分别是:1个文本(初始值为“Your name, please?”),1个线框(nameEdit_),1个空文本(greeting_)和1个按钮(button)。以上三类部件都是Wt库提供的原始部件,直接关联到对应的HTML元素上。在Hangman例子中,我们将会看到其他自定义的部件。】
After we instantiated the widgets, we specify that we want to react to a click on the button. We connect the greet()method to the button’s clicked() signal. Events propagate from one widget (the button) to other widgets or, as in this case, the application object, using signals. A glimpse at the reference documentation of a widget lists the signals that are exposed by a particular widget. For basic widgets, such as a push button, these are the typical mouse and keyboard events. Higher-level widgets may advertise other events (for example, a calendar widget) has aselectionChanged() signal), and you can add events to your own custom widgets.
【实例化后,我们将要对按钮的点击做出反应。我们连接greet()方法到按钮的clicked()信号上。事件将从一个部件(按钮)传递到其他部件上,当然本例中,实际是传递到应该对象上。我们可以先行查看一下Wt的文档明确哪些部件都能够释放出哪些信号,这里,如按钮,他有典型的鼠标和键盘事件释放出信号。其他高级部件可能会发出其他事件,如selectionChanged()等,以此为基础,你可以增加这些事件到自己的定制部件上。】
How event propagation works
【
事件传递是如何工作的?】
When an event is triggered by the user, the web browser communicates the target object and corresponding signal together with all form data to the web server (using a full page refresh or Ajax/WebSockets). At the server, after the request has been validated as genuine, form data such as line edit text is first processed to update the widget tree state. Then, the event is propagated by emitting the signal on the target widget, which propagates the event to all connected methods, such as in our example the greet() method. Modifications to the widget tree are tracked, and after the event has been handled these changes are reflected on the rendered HTML DOM tree, again using a full page refresh or incrementally using Ajax or WebSockets.
【当某个事件被用户出发后,Web浏览器将发送目标对象和对应的信号(连同所有的表单数据)给Web服务器{function(o, e)},这一过程可以使用全页面刷新,也可以使用Ajax/WebScokets。当请求被验证为正确后,在服务器端,表单数据(如线框文本)首先被处理进而更新部件树的状态。然后,事件通过释放信号的方式被传递给目标部件,信号将把事件传递给所有连接的方法,比如例子中的greet()方法。对部件树的修改将会被追踪,当事件被处理完成后,相应的变化将通过全页面刷新或增量渲染(Ajax/WebScokets)反映在渲染后的HTML DOM树上。】
The most interesting thing about the implementation of the greet() method may be the code that is not there: no JavaScript to update the text using DOM manipulations or to re-render the page, no JavaScript code to post the event end line edit value using Ajax or WebSockets, no HTTP request decoding to interpret the line edit value or button event, and no security-related code. All this is handled instead by the library. While this could still be manageable for such a small example, imagine a situation where the page contains various form elements related to different tasks and thus managed by different widgets, and where during event propagation many unrelated widgets get updated.
【最有趣的地方是 greet()函数的实现,其中不包含任何JavaScript代码,典型的我们用JavaScript操作DOM更新文本部件;也没有任何JavaScript代码调用Ajax或WebSockets发送事件设置线框值;也没有HTTP请求去解码线框值或按钮事件;也没有处理用户输入不安全因素的代码。可以说:所有以上这些都由Wt库代为处理了!】
4. Hangman【Hangman例子】
For those of you who forgot the game-play of hangman: the challenge is to guess a word. You can pick a letter, one at a time. If the word contains the chosen letter, it is indicated at the correct location(s). If the word does not contain the letter, you loose a turn and get one step closer to hanging. To win, you need to find the word before you die hanging. In our version, we will let the user choose a dictionary (English or Dutch), and we keep track of users and his high-scores.
【简单介绍一下Hangman游戏:实际就是猜词,一次只能选一个字母,如果要猜的词中包含刚选的字母,那么它会显示在词中正确的位置(可能有多个位置[重复出现])。如果不包含该字母,那么玩家记为失败一次,一步步走向被吊死。所以,要想取胜,只能在被吊死前尽力找到所有包含的字母。在例子中,我们让玩家在已有的词典中随机选词,还提供了对用户活动的记录,比如高分榜等。】
4.1. A first custom widget 【第一个定制部件】
We first discuss the HangmanWidget, which is a custom widget that encapsulates the game itself: it allows a user to play one or more games. It does not deal with updating the user’s score, instead it indicates score update events to other widget(s) using a signal.
【首先讨论 HangmanWidget,这是一个定制部件,封装了游戏本身:它允许用户在它的界面上多次玩这个游戏。但它不会去处理如更新用户得分的事情,它只是将得分更新事件通过信号传送给别的部件处理。】
The following screenshot shows how the widget is composed of different widgets:
【下面的截图展示了 HangmanWidget 包含的部件情况:】
The HangmanWidget combines widgets provided by the library (WText: title_, statusText_, WComboBox: language_), and three custom widgets (WordWidget: word_, ImagesWidget: images_ and LettersWidget: letters). As you will see, custom widgets are instantiated and used in pretty much the same way as library widgets, including reacting to events generated by these widgets.
【HangmanWidget 组合了Wt库提供的多种部件,包括 WText:title_、statusText_,WComboBox:language_和3个自定义的部件(WordWidget:word_,ImagesWidget:images_和LettersWidget:letters)。正如你将看到的,自定义的部件将被实例化和使用,其方式与Wt库提供的基本部件的使用一样,包括部件对事件的响应。】
With this information, we can implement the class definition.
【HangmanWidget类的定义如下:】
HangmanWidget declaration
【
HangmanWidget 的声明部分】
class HangmanWidget : public Wt::WContainerWidget
{
public:
HangmanWidget(const std::string &name, Wt::WContainerWidget *parent = 0);
Wt::Signal
private:
Wt::WText *title_;
WordWidget *word_;
ImagesWidget *images_;
LettersWidget *letters_;
Wt::WText *statusText_;
Wt::WComboBox *language_;
Wt::WPushButton *newGameButton_;
Wt::Signal
std::string name_;
Dictionary dictionary_;
int badGuesses_;
void registerGuess(char c);
void newGame();
};
This widget is implemented as a specialized
WContainerWidget. This is a typical choice for widgets that combine other widgets in a simple layout. Following a customary practice for widgets, we take an optional parent container as the last argument of the constructor. We declare one public method scoreUpdated(), which provides access to the signal that will be used to indicate changes to the user’s score as he plays through games. A
Signal
【
HangmanWidget作为WContainerWidget的子类实现,这种实现方式也是我们开发中一种典型的实现方式,用以组合各种其他部件于一个框架中。构造函数中,我们使用了一个可选的父容器作为最后一个参数。我们还声明了一个公共方法scoreUpated(),该方法提供了对更新用户分数信号的访问。这里使用了 Signal
The private section of the class declaration holds references to the contained widgets, and state related to the game.
【私有成员部分包括了必须的一些部件和游戏状态表达部件。】
The constructor implementation shows some resemblance with the hello world application we discussed earlier: widgets are instantiated and event signals are bound. There are some novelties however.
【构造函数的实现与Hello World类似,各种部件被实例化,事件信号被对应绑定,但也有些不同之处。】
HangmanWidget constructor
【
以下是 HangmanWidget的构造函数:】
using namespace Wt;
HangmanWidget::HangmanWidget(const std::string &name, WContainerWidget *parent)
: WContainerWidget(parent),
name_(name),
badGuesses_(0)
{
setContentAlignment(AlignCenter);
title_ = new WText(tr("hangman.readyToPlay"), this);
word_ = new WordWidget(this);
statusText_ = new WText(this);
images_ = new ImagesWidget(MaxGuesses, this);
letters_ = new LettersWidget(this);
letters_->letterPushed().connect(this, &HangmanWidget::registerGuess);
language_ = new WComboBox(this);
language_->addItem(tr("hangman.englishWords").arg(18957));
language_->addItem(tr("hangman.dutchWords").arg(1688));
new WBreak(this);
newGameButton_ = new WPushButton(tr("hangman.newGame"), this);
newGameButton_->clicked().connect(this, &HangmanWidget::newGame);
letters_->hide();
}
Wt supports different techniques to layout widgets that may be combined (see also the sidebar): namely widgets with CSS layout,
HTML templates with CSS layout, or
layout managers. Here, we chose to use the first approach, since we simply want to put everything vertically centered.
【
Wt支持不同技术实现部件的布局:CSS布局、Wt的 HTML Template、框架管理器等。这里使用了第一种,简单展示。】
Other layout options 【
其他布局方式】
Although layout managers are a familiar concept in GUI development, CSS is king of layout in web development. Some things are hard to do with CSS though, in particular vertical centering or vertical size adjustments. It is for this purpose that layout managers have been added to Wt. These layout managers use JavaScript to compute the width and/or height of widgets based on dimensions of other widgets.
【虽然我们在GUI开发中很熟悉布局管理器,但在Web开发中CSS却是主导。因为有些东西使用CSS很难实现,如纵向居中或纵向尺寸调整,鉴于此Wt基于JavaScript引入了布局管理器,通过JavaScript计算部件及其间的宽度和高度。】
The LetterWidget exposes a signal that indicates that the user chose a letter. We connect a private methodregisterGuess() to it, which implements the game logic of dealing with a letter pick. Notice how this event handling for a custom widget is no different than reacting to an event from a push button, making that widget as much reusable as the widgets provided by the library (assuming you are in the business of hangman games).
【上面的LetterWidget部件可以释放出一个信号,该信号表明用户选择了一个字母。我们将该信号连接到私有的 registerGuess() 方法上,这个方法可以处理用户选中字母后的游戏逻辑。注意,这个自定义的部件的事件的处理与上面提到的按钮部件的处理没有什么不同,Wt将部件的复用做到最大极致。】
To support internationalization, we use the tr("key") function (which is actually a method of WWidget which callsWString::tr(), to lookup a (localized) string given a key. This happens in a message resource bundle (seeWMessageResourceBundle), which contains locale-specific values for these strings. Values may be arg() method of WString, as used for example for the “hangman.englishWords” string which has as actual English value “English words ({1} words)”.
【为了支持I18N,我们使用了 tr("key") 函数,这个函数实际上是调用WString::tr()根据给定的key去寻找本地化字符串,在哪里寻找呢?实际是通过 WMessageResourceBundle指定的文件中。另外,arg()方法返回一个字符串值,这个值用于替换本地化字符串中的标示第几个参数的一个表达式。本例中 tr("hangman.englishWords")实际得到的本地化字符串是“English words ({1} words)”,(因为作者是英语写作),里面有个表达式{1},arg()结果就取代{1},具体值是18957,表示英文词典中共有18957个单词。】
For completeness, we show below the rest of the HangmanWidget implementation.
【为了完整,我们贴上HangmanWidget的实现代码,如下:】
void HangmanWidget::newGame()
{
WString title(tr("hangman.guessTheWord"));
title_->setText(title.arg(name_));
language_->hide();
newGameButton_->hide();
Dictionary dictionary = (Dictionary) language_->currentIndex();
word_->init(RandomWord(dictionary));
letters_->reset();
badGuesses_ = 0;
images_->showImage(badGuesses_);
statusText_->setText("");
}
void HangmanWidget::registerGuess(char c)
{
bool correct = word_->guess(c);
if (!correct) {
++badGuesses_;
images_->showImage(badGuesses_);
}
if (badGuesses_ == MaxGuesses) {
WString status(tr("hangman.youHang"));
statusText_->setText(status.arg(word_->word()));
letters_->hide();
language_->show();
newGameButton_->show();
scoreUpdated_.emit(-10);
} else if (word_->won()) {
statusText_->setText(tr("hangman.youWin"));
images_->showImage(ImagesWidget::HURRAY);
letters_->hide();
language_->show();
newGameButton_->show();
scoreUpdated_.emit(20 - badGuesses_);
}
}
4.2. Unleashing (some of) Wt’s power 【进一步显示Wt的能量】
Until now, we introduced a rather unique way to develop web applications, and a powerful building block for reuse – the widget. The next widget in the Hangman game that we will tackle, is one we’ve already used just earlier: theImagesWidget. It illustrates an important aspect of the library that highly enhances the user experience for users with an Ajax session (which should be the majority of your users). One of the most appealing features of popular web applications like Google’s Gmail and Google Maps is an excellent response time. Google may have spent quite some effort in developing client-side JavaScript and Ajax code to achieve this. With little effort – indeed almost automatically – you can get similar responsiveness using Wt, and indeed the library will be using similar techniques to achieve this. A nice bonus of using Wt is that the application will still function correctly when Ajax or JavaScript support is not available. The ImagesWidget class, which we’ll discuss next, contains some of these techniques. Hidden widgets are prefetched by the browser, ready to be displayed when show() is called.
【介绍到此,我们明确了采用Wt使用一种非同寻常的方法开发Web应用,一种强大的部件模块的复用方式。下面要解读的是游戏中ImagesWidget,该部件展示了Wt库的一种重要性能,能够进一步提高Ajax会话的用户体验。这个用户体验的最明显的例子是Gmail和Google Maps,估计Google花费了很大努力开发客户端JavaScript和Ajax代码以获得这个效果。但在Wt中,你可以通过很小的努力-实际上不用努力,Wt自动实现了,不过话说穿,与Google一样使用了相同的技术。另外,使用Wt还有另一个好处,即使是浏览器不支持Ajax或JavaScript时Wt应用照样运行。ImagesWidget部件就是这些技术的体现。实际上,这个部件的窍门是:预先载入,但隐藏,等需要时(show()被调用时)显示出来。】
ImagesWidget: implementation
【
ImagesWidget的实现如下:】
ImagesWidget::ImagesWidget(int maxGuesses, WContainerWidget *parent)
: WContainerWidget(parent)
{
for (int i = 0; i <= maxGuesses; ++i) {
std::string fname = "icons/hangman";
fname += boost::lexical_cast
WImage *theImage = new WImage(fname, this);
hangmanImages_.push_back(theImage);
theImage->hide();
}
WImage *hurray = new WImage("icons/hangmanhurray.jpg", this);
hurray->hide();
images_.push_back(hurray);
showImage(HURRAY);
}
void ImagesWidget::showImage(int image)
{
image(image_)->hide();
image_ = index;
image(image_)->show();
}
WImage *ImagesWidget::image(int index) const
{
return index == HURRAY ? images_.back() : images_[index];
}
In the constructor, we meet one more basic widget from the library: WImage, which unsurprisingly corresponds to an image in HTML. The code shows how widgets corresponding to each state of the hangman example are created and added to our ImagesWidget, which specializes a WContainerWidget. Each image is also hidden – we’ll want to show only one at a time, and this is implemented in the showImage() function.
【构造函数中,我们使用了 WImage,实际就是HTML中的图像。代码显示对应于每种状态的图片是如何创建并加入到 ImagesWidget中,该类也是 WContainerWidget 的一个衍生。每张图片都预先隐藏,未来就一次一个的显示,使用 showImage() 方法。】
But why do we create these images only to hide them? A valid alternative could be to simply create the WImage that we want to show and delete the previous, or even better, to simply manipulate the image to point to another URL? The difference has to do with the response time, at least when Ajax is available. The library first renders and transfers information of visible widgets to the web browser. When the visible part of web page is rendered, in the background, the remaining hidden widgets are rendered and inserted in the DOM tree. Web browsers will also preload the images referenced by these hidden widgets. As a consequence, when the user clicks on a letter button and we need to update the hangman image, we simply hide and show the correct image widget, and this no longer requires a new image to be loaded. An alternative implementation would have caused the browser to fetch the new image, making the application appear sluggish. Using hidden widgets is thus a simple and effective way to preload contents in the browser and improve the responsiveness of your application. Important to remember is that these hidden widgets do not compromise the application load time, since visible widgets are transferred first. A clear win-win situation thus.
【但是为什么我们创建这些图像并先隐藏起来,很简单,就是为了较快的反应时间。Wt库首先渲染可见部件,之后,再渲染不可见的,并悄悄插入到DOM树中。当然浏览器也会预先载入部件所代表的图片。这样做的结果就是,未来根据用户的选择,图片的出现就成了简单的显示/隐藏,根本不需要新图片的载入。如果不这样,浏览器会重新载入图片,应用就会变慢。请注意:最重要的是隐藏部件不会消耗应用的载入时间。】
4.3. Internal paths 【内部路径】
Ignoring the login screen for a moment, then our application has two main windows: the game itself and the high scores. These are implemented by the HangmanWidget which we discussed earlier, and a HighscoreWidget (which we will not be discussing in this tutorial). Both are contained by a WStackedWidget, which is a container widget which shows only one of its contained children at a time (and which, in all honesty we should have used to implement the ImagesWidget, were it not that we wanted to explain a bit more about preloading of contents). Unless we do something about it, a Wt application presents itself as a single URL, and is thus a single-page web application. This is not necessarily bad, but, it may be better to support multiple URLs which allows a user to navigate within your application, bookmark particular “pages”, or put links to them. It also is instrumental to unlock the contents within your application to search engine robots. Wt provides you with a way to manage URLs which are subpaths of the application URL, which are called “internal paths”.
【考虑这个例子,忽略登陆页面,那么就剩下两个主窗口:一个是游戏页面本身(HangmanWidget),另一个就是高分榜页面(HighscoreWidget),这两个页面/部件都存放于 WStackedWidget中,它也是个容器部件,实现一次只显示一个子部件。Wt应用通常情况下是单页面Web应用,这也并不坏,但如果支持多个URL会更好,那便会允许用户针对URL进行导航,或是利用收藏夹/书签收藏特定页面,另外还可以辅助向搜索机器人解锁内容。Wt利用内部路径机制提供了这一功能。】
Internal paths are best used in combination with anchors (provided by another basic widget, WAnchor). An anchor can point either to external URLs, to private application resources (which we’ll not discuss but are useful for dynamic non-HTML contents), or to internal paths. When such an anchor is activated, this changes the application’s URL (as one could expect), and the internalPathChanged() signal is emitted. Thus, to respond to an internal path change, we connect an event handler to this signal.
【内部路径最好和 WAnchor配合使用。通常锚可以指向外部URL,也可以指向应用的资源,更可以指向我们所说的内部路径。当用户点击锚时,internalPathChanged() 信号将被释放,通过获取这个信号,我们得以处理页面变化。】
Internal paths: a perfect illusion 【
内部路径:完美
障眼法】
Normally, when a user navigates a link, the browser fetches the document linked to and replaces the current HTML page with the new page. This system of "full page refreshes" causes the browser to re-render the whole page each time, and is exactly what Ajax came to avoid. Using new features in HTML 5 (JavaScript History support), and falling back to tricks involving URL fragments in older browsers, Wt creates the illusion of navigating to a new page, but instead uses Ajax to update the page to reflect the URL change and navigation events. At the same time, search engines and plain HTML sessions will view your application using full page refreshes.
【正常情况下,当用户导航到一个链接时,浏览器将获得获得所链接的新内容,并替换当前的HTML页面,这就是全页面刷新,它将引起浏览器每次都重新渲染整个页面,当然这也就是Ajax产生的原因。通过使用HTML5(JavaScript历史记录支持)的新特性,以及以前浏览器的一些通过#号URL处理的特殊技巧,Wt创造了切换到新页面的障眼法,即通过Ajax更新页面来反映URL的变换和对应的导航事件。同时,搜索引擎和纯HTML会话将以全页面刷新的方式看待Wt应用。】
This is the implementation of the method that we connected:
【例子中内部路径的具体应用如下:】
HangmanGame: internal path handling
void HangmanGame::handleInternalPath(const std::string &internalPath)
{
if (session_.login().loggedIn()) {
if (internalPath == "/play")
showGame();
else if (internalPath == "/highscores")
showHighScores();
else
WApplication::instance()->setInternalPath("/play", true);
}
}
Thus, if a user is logged in, we show the game when the path is “/play” and the high scores when the path is“/highscores”. For good form, we redirect all other paths to “/play” (which will end up triggering the same function again). In our game we make authentication (whether a user is currently logged in orthogonal to the internal paths): in this way a user may arrive at the game using any internal path, log in, and automatically proceed with the function for that internal path. You may imagine that this is what you want in a complex application: the login function should not prevent the user from directly going to a certain “page” within your application.
【这样一来,如果用户是登陆状态,那么,当路径是“/play”时就游戏页面,当“/highscores”时就是显示高分榜页面。为了形式良好,我们把其他路径(特别输入错误的路径)都指向“/play”。在游戏应用中,我们做了一些身份认证工作,也就是用户是否登录进来。这里,你可以想象,对于复杂应用:login认证可以有效阻止用户直接进入某些(可能是我们不想使之进入的)页面(功能块)。】
We did not discuss other parts of the hangman game example application: namely how user scores are stored, and the authentication system. Database access is implemented using a Wt::Dbo, which is a C++ ORM that comes with Wt. This tutorial introduces the database layer. The authentication module, Wt::Auth, as used in this example, is introduced here.
【对于本例的其他部分我们就不讨论了:如如何存储用户得分、如何认证。数据库的访问使用了Wt::Dbo,它是Wt独有的C++ORM。认证模块使用了Wt::Auth。】
5. Summary 【总结】
In this tutorial we provided you with the basic techniques for creating web applications using Wt, from small to more complex. While a tutorial is no place to discuss a real-life complex application, with a small leap of faith, it should be clear that the same techniques of creating an application using widgets as building blocks, provides an effective way to manage complexity (and evolving features), while freeing the application developer of many technical aspects and quirks associated with the web platform. Because of the many similarities between Wt and other GUI toolkits, developers can treat the web browser in many aspects as just another GUI platform.
【本教程中我们向您讲述了Wt创建Web应用的基本技术,有简单的也有复杂的。虽然我们还没有讨论真正的复杂的项目,但相信你能够清楚复杂项目使用的技术是相同的,无非就是部件模块的搭建。至此大家应该会看到,Wt提供了管理复杂应用的高效手段,同时让开发者免于面对开发平台相关的技术细节和陷阱;最后,Wt也让开发者像开发桌面GUI应用一样开发Web应用,浏览器也就是我们的GUI平台。】
In this tutorial we touched on many important Wt features. But Wt adds much more to your toolbox that weren’t mentioned: file uploads, dynamic resources, painting, tree and table views and their models, a charting library, animation effects, WebSockets, built-in security measures, authentication, etc… For more information, please see theonline documentation.
【本教程涉及到了Wt的基本特点,但Wt还在不断地增加新的内容,如文件上传、动态资源、绘画系统、树表视图及其模型、图表库、动画、WebSockets、内置安全、认证等等,更多内容请阅读在线文档。】
Last updated 2011-12-14 11:25:08 CET
【
翻译时间:2012-01-19】
参考文献
[1] 谷歌推出Dart :剑指JavaScript http://tech.it168.com/a2011/1018/1260/000001260105.shtml
[2] SEO搜索引擎优化与JavaScript http://www.net366.net/blog/post/12.html
[3] 痛陈javascript的缺点 http://www.php100.com/html/webkaifa/javascript/2009/0302/1681.html
[4] Partial-Page Rendering Overview http://msdn.microsoft.com/en-us/library/ie/bb386573.aspx
[5] What is WebSocket? http://websocket.org/index.html
[6] Convenience function http://en.wikipedia.org/wiki/Convenience_function
转载于:https://my.oschina.net/zhmsong/blog/39304
优惠劵
weixin_33937499
关注
关注
1
点赞
踩
8
收藏
觉得还不错?
一键收藏
知道了
0
评论
Wt快速入门教程[中英文]
2019独角兽企业重金招聘Python工程师标准>>> ...
复制链接
扫一扫
WT教程
02-21
WT教程
【Windows】Windows Terminal教程
Juruo@Security
08-27
359
Windows Terminal教程
参与评论
您还未登录,请先
登录
后发表或查看评论
Wt::Dbo教程
Living And Programing
03-20
2589
-------------------------------------------------------------------------------
Wt::Dbo教程
-------------------------------------------------------------------------------
目录
1. 介绍
2. 映射单个类
3. 第一个session
4. 查询对象
5. 更新对象
6. 映射关系
6.1 多对1关系
6.2
wt:Wt,C ++ Web工具包
04-30
什么是Wt?
Wt是用于开发Web应用程序的C ++库。 它包括:
libwt,一个小部件/渲染库
libwthttp,一个(异步I / O)HTTP / WebSockets服务器
libwtfcgi,一个FastCGI连接器库(Unix)
libwtisapi,一个ISAPI连接器库(Windows)
libwttest,一个测试连接器环境
它还包含一个C ++ ORM,可以在Web应用程序中使用(显然),但也可以单独使用:
libwtdbo,C ++ ORM
libwtdbopostgres,PostgreSQL后端
libwtdbosqlite3,Sqlite3后端
libwtdbomysql,MySQL和MariaDB后端
libwtdbomssqlserver,Microsoft SQL Server后端
libwtdbofirebird,Firebird后端
有关
Altium Designer 18官方教程中英文版
06-12
Altium Designer 18官方教程中英文版。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Wt入门
菜园子
12-10
2894
一篇关于Wt C++类库开发Web应用的深入浅出的介绍*最早发布于2006年4月“软件开发者”期刊,针对于Wt1.1.0。当然也可以获取PDF形式的拷贝。1 介绍未来的web开发技术C++是一种公认的可以可以用来开发各种应用的语言,比如桌面应用程序,邮件客户端程序,数据库引擎程序等等。然而使用C++开发web应用却有着一定的限制。相反占据web应用开发的语言有:Java,PHP,Python和Perl,除过PHP,还有一些特定的用于开发web应用的框架,比如J2EE,用于Java上的Struts,用于Per
wt概述-c++ web
The research on computer technolog
12-09
1198
虽然Wt是用c++实现的,但它的主要焦点或新奇之处并不在于性能,而在于开发可维护的应用程序和广泛的内置小部件库。但是由于它在嵌入式系统中很流行并被广泛使用,您会发现性能和足迹也得到了优化,这得益于一个没有废话的API、周到的架构和c++…在本教程中,我们将使用两个小程序来演示如何使用Wt创建web应用程序。在本教程之后,您应该很好地掌握了Wt应用程序是如何构建的,以及它如何为您提供管理复杂性的工具。
WTScada Gateway Web组态软件初级应用教程
05-11
HTML5 Web组态软件技术是最新的面向未来的组态软件技术,和传统的桌面组态软件相比Web组态软件画面开放全部在Web浏览器进行,组态后可以立即运行,呈现效果,HTML5技术可以支持各种浏览器,包括电脑浏览器,手机浏览器,Pad浏览器,电视机浏览器。通过学习本课程学员可以快速掌握WTScada Gateway组态软件的应用,给用户提供全新的Web组态技术,结合云服务器轻松构建物联网应用。本人是WTScada Gateway Web组态软件的开发者,该软件目前大量应用于MES系统的数据采集和画面呈现和工厂信息化应用。本课程从快速入门,驱动配置,归档配置,扩展应用,脚本应用等几个方面展开,帮助学员快速掌握WTScada Gateway的基本应用,本课程适用于组态软件入门者和一定组态软件应用经验的工控技术人员。
c++ wt开发环境配置
谢小军的专栏
03-15
3507
最近看到一个开源库,c++ web toolkit库,
Wt是一个针对Web应用开发的C++ widget库。可以使用c++开发web应用,感觉相当的巴适啊。所以就来学习使用了,
这里方便将来回顾,so,在这里发布了写白痴的博客,方便将来查看。
首先要编译wt库,我是使用Windows来做开发的,故在网上下了个现成的
地址:http://sourceforge.net/projects/w...
Vue整合JWT实现用户登录----权限校验
Pole丶逐
04-24
1495
首先需要明白Jwt是什么
这里有个大佬详细介绍如何使用
<<密码加密与微服务鉴权JWT详细使用教程>>
我们只使用这个工具进行功能实现
流程图
步骤详解
功能一 : 登录成功后使用jwt生成随机码,并传递给浏览器(token)
功能二 : 浏览器判断登录成功后,把token保存到sessionStorage中(会话级别)
功能三 : 在每次发送h...
WT-328 繁体版.pdf
05-24
WT328操作手冊
WT-328是一款面向高端WLAN產品生產測試的專用儀器,支援400M-6G頻段的射頻信號測試,可為新一代WLAN協定
Wave2/11ax提供可靠、高效的射頻測試方案。兩套獨立的測試單元,單機可支援2X2 True MIMO測試,支援MU-MIMO; 新
增TX-AUX埠,支援高功率輸出,滿足產品研發時極限性能測試的需求;成熟的8埠並行測試技術,高效的運行特性兼顧了研發
端與產線的測試需求。
wt - 网站开发c++框架
03-15
wt框架是一个c++框架,用于网站开发。通常我们习惯了使用脚本语言来开发网站,实际上使用c++也是可以做到的。wt就提供了这样的一整套开发套件。感兴趣的可以学习一下。
Wt官方入门向导(中文翻译)
02-26
Wt是一个针对Web应用开发的C++ widget库。Wt应用模型和现存的GUI库(例如微软的MFC或者TrolTech的Qt)是很相似的。同时,Wt为开发者隐藏了很多潜在的技术细节(HTML,Forms/CGI, JavaScript, Ajax等等),就像Qt库如何隐藏潜在的X库或者微软的Windows GUI的细节一样。
因为Wt的API对底层的技术(Forms,JavaScript或者Ajax)做了抽象,Wt根据浏览器支持的技术来和浏览器通信。使应用能够在一大堆浏览器种运行的责任从应用开发者身上转移到了Wt库开发者身上
WTEditor(窗口标题修改工具) V1.0 成品&源码本工具可用于修改窗口标题.rar
03-21
WTEditor (窗口标题修改工具) V1.0 帮助文档
1.WTEditor是什么?
WTEditor 是一款开源的、可视化的窗口标题修改工具。此程序可以帮助您修改您捕获到的窗口的标题。
2.WTEditor 如何使用?
1) 捕获窗口句柄和标题
在确保打开WTEditor后,在屏幕上选中(激活)任意一个窗口;
按下键盘上的F7键,WTEditor将立即捕获该窗口的句柄和标题。
2)编辑窗口标题
在捕获窗口信息后,切换到WTEditor窗口并在“窗口标题”编辑框内输入您想要显示在被捕获窗口上文本;
3)应用窗口标题
在输入新的窗口标题后,单击“更改”按钮,窗口标题即刻被更改为您输入的文本。
4)撤销您的改变
在更改窗口标题后,若需要将窗口标题更改为原窗口标题,请单击“撤销”按钮,窗口标题即恢复为您上次更改前的标题。
3.关于WTEditor
关于WTEditor
本程序为FastCoder开发。版本1.0.0
Windows窗口模板
04-29
里面添加了许多注释,并且代码经过我多次调试,你只要把自己需要的功能添加进窗口过程就好了,对于新手或者比较懒得人都很有用,绝对有用,因为是我自己注释的难免有一些错误,欢迎网友指正
iTest wt-20x测试仪的快速入门手册
02-20
深圳极致汇仪WLAN蓝牙射频测试仪器的快速入门手册 quick guide
WT官方入门向导(中文翻译)11.pdf
09-16
Wt是一个针对Web应用开发的C++ widget库。Wt应用模型和现存的GUI库(例如微软的MFC或者TrolTech的Qt)是很相似的。
风资源WT软件使用规范
10-11
此文档的目的是为使用美迪WT软件从事风能资源评估的工程师提供一个简明扼要的操作规范参考。文档一方面基于美迪WT软件自身的技术特点,介绍了为获得准确、可靠的模拟结果所必须达到的条件,另一方面结合了我们近年来与广大来自设计院、开发商、风机厂商的工程技术人员在软件使用和项目研究上的交流情况,对于软件安装、系统环境、入口数据准备、定向计算、综合等软件使用的各个方面进行了描述,列举了一些合理的操作方法和一些常见问题。
openwt开发手册
09-10
很好的关于openwrt的资料,对openwrt的开发作了详细的说明.
pdms中如何卸载WT-维图插件
最新发布
04-23
对于卸载 PDMS 中的 WT-维图插件,你可以按照以下步骤进行操作:
1. 首先,关闭 PDMS 软件。
2. 找到 PDMS 安装目录下的 wt_setup.exe 文件,双击打开。
3. 在弹出的“维图集成列管器”窗口中,选择“卸载”选项。
4. 在下一步窗口中,选择“要卸载的 WT-维图插件”,并单击“卸载”按钮。
5. 等待卸载过程完成,然后单击“完成”按钮关闭界面。
以上就是卸载 PDMS 中的 WT-维图插件的步骤,希望可以帮助到你。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
weixin_33937499
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
140
原创
-
周排名
138万+
总排名
127万+
访问
等级
7318
积分
4030
粉丝
295
获赞
11
评论
1592
收藏
私信
关注
热门文章
大学物理实验 考点总结
63141
基于Token认证的WebSocket连接
13759
修改完/etc/fstab后重新挂载方法
12766
如何学习 Spring ?学习 Spring 前要学习什么?
11920
win10系统设置webp文件默认用照片查看器打开的两种方法
9989
最新评论
labview 中activex的初步使用方法
qqqqqsadfasdfa:
说了等于没说一样,谁不会百度
满足你各种姿势的最美Android开源日历
悅悅~:
当日不可点击怎么设置的
谈谈持续集成,持续交付,持续部署之间的区别
MUXI33:
看了这么多你这篇终于让我明白了 感谢大佬
8148 8168 中移植live55 出现except rtsp 中途莫名的断流
qq_39314918:
那问题解决了吗?
项目经理面试中可能遇到的问题(持续更新)
小蚂蚁จุ๊บ:
虽然不是软件行业,受用 共鸣
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
【C#学习笔记】播放wma/mp3文件
matlab练习程序(生成多维高斯分布概率密度函数)
Dynamic menu for .net
2019年381篇
2018年690篇
2017年1014篇
2016年558篇
2015年397篇
2014年323篇
2013年323篇
2012年285篇
2011年190篇
2010年131篇
2009年95篇
2008年82篇
2007年47篇
2006年34篇
2005年20篇
2004年15篇
目录
目录
最新文章
【C#学习笔记】播放wma/mp3文件
matlab练习程序(生成多维高斯分布概率密度函数)
Dynamic menu for .net
2019年381篇
2018年690篇
2017年1014篇
2016年558篇
2015年397篇
2014年323篇
2013年323篇
2012年285篇
2011年190篇
2010年131篇
2009年95篇
2008年82篇
2007年47篇
2006年34篇
2005年20篇
2004年15篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
个
红包个数最小为10个
红包总金额
元
红包金额最低5元
余额支付
当前余额3.43元
前往充值 >
需支付:10.00元
取消
确定
下一步
知道了
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom 发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
0
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值
专访 WT 中国区CEO周世雄:伟门智威一周岁,我们还有很长路要走 - 数英
专访 WT 中国区CEO周世雄:伟门智威一周岁,我们还有很长路要走 - 数英
热门:
素材资源
下载
娱乐幽默
方法论
数据
趋势创新
盘点榜单
营销
社会化
运营
文章全部文章项目职位人企业
首页
文章
全部
头条
精选
热文
特色专栏
项目
全部
每周项目精选
每月项目精选
海外项目精选
近期热门项目
近期最多收藏
全球奖库
招聘
全部
创意/设计
文案/策划
客户/市场
运营/产品
技术/制作
人
指数
课堂
数英奖
最新收录
头条
热文
精选
人气作者文章
专访 WT 中国区CEO周世雄:伟门智威一周岁,我们还有很长路要走
原创
赞126
收藏32
评论5
举报
2020-09-24
扫描,分享朋友圈
Wunderman Thompson (伟门智威)中国区首席执行官周世雄(Carter Chow)采访:Choco、Yi L.撰文:Yi L.数英原创文章,转载请遵守底部规范2018 年 11 月,全球最大的传播集团 WPP 宣布,将旗下 J.Walter Thompson(智威汤逊)与数字营销机构 Wunderman(伟门)合并为一家新公司 Wunderman Thompson(伟门智威)。一时间舆论哗然,震惊与遗憾在所难免:如「巨人」般屹立了 154 年的 JWT,不仅是全球第一家广告公司,也是无数广告人心中的圣殿。厂牌上那只展翅飞翔的猫头鹰,象征着与创意有关的一切睿智与勇气,也凝聚着全行业的骄傲。今年 7 月,数英撰写了题为《他们的 JWT 往事,无法复制的智威汤逊》的专访文,采集 8 位「前智威汤逊人」的前尘往事,大家纷纷表达了对老厂牌的致敬与怀念。文章发布后,在业内引发共鸣,评论区中不乏真情流露。一边是对 JWT 的怀念,另一边,我们也不能忽视全新的 Wunderman Thompson:携带 JWT 过往的创意基因,同时被赋予了伟门在数据上的应用能力,WT 可以被视作这两家前身的改良与进化版本。诞生至今已 1 年有余,关于它的故事,外界了解并不多,而这也更令我们感到好奇。我们有幸联系并采访到 Wunderman Thompson 中国区首席执行官周世雄(Carter Chow)。自 1994 年入行,周世雄从基层 AE 开始做起,在 4A 体系中工作已 26 年。他曾于 2002 年至 2006 年供职 JWT 后离开,又于 2016 年回归并担任 JWT 中国区 CEO。2019 年,他被任命为重组后 Wunderman Thompson 中国区 CEO,全程经历了 JWT 与伟门的合并。一个多小时的访谈里,我们从 Wunderman Thompson 的诞生与进化,聊到当下市场竞争中国际 4A 的生存现状,再到时代趋势里行业的新现象,最后回归到作为一枚「老 4A 人」的心路历程。面对其中一些并非好解的疑问,Carter 也给出了自己的审慎回答。采访现场 从 JWT 到 WT:变与不变这的确已经不是之前的 JWT,我们是未来的 Wunderman Thompson。Take the best and Look forward(提炼最优,向前看),这就是一个进化的过程。 数英:在合并期,您为何会选择继续留守在 JWT ?领导新组建的 Wunderman Thompson,对您而言,吸引力与挑战分别在哪儿?Carter : 我觉得合并对 JWT 和 Wunderman 来说都是一个很好的机会。从企业未来方向看,两家的重组在行业发展的中短期都是一个非常好的趋势,这能给到客户和市场一个新的冲击力。挑战一定是有的:把两家有不同文化的团队结合在一起,前期的磨合、人员的配备其实都不容易,有种「手心是肉,手背也是肉」的感觉。我也必须基于公司未来的发展,组建出一个能让公司向前走的团队。回看 JWT,它在中国是近二三十年的创意领袖。当然这有弊有利:有优秀的根基是有优势的,比如市场上的知名度等。但在某些程度上是否也是一个手铐?导致我们依靠之前市场上获得的名誉,而非积极向前改变?同样的,Wunderman 在数字,CRM(Customer Relationship Management,客户关系管理)等方面都非常优秀,但目前市场的需求是无法将创意、数据、技术完全分开的。把 Wunderman 和 JWT 结合在一起,真正的用意是怎样整合我们的服务(offering)。早期合并的时候,我最看重的三样东西就是 integration(整合),integration,跟integration,想尽办法从业务和团队上融合整个公司。今年疫情和市场的挑战给到了公司共同的奋斗目标,也使得我们加速了整合。我们对外宣布重组结构的消息大约在去年五月,大家真正搬到同一个地方上班是七八月份,所以说老实话至今才一年。 Integration(整合)的路虽然还没有结束,需要我们继续前进,但回首一年,我们已经迈出了很重要的一大步。如果你去观察世界上一些大公司的合并案例,真正能算得上成功的都不是十几个月就能搞定的。Wunderman Thompson 上海办公室 数英: 在组建 Wunderman Thompson 的公司架构与人员配置过程中,您如何平衡 JWT 和伟门之角色?Carter:与其说平衡,不如说如何取其精华并将其融合到一起。我的任务不是仅仅做简单的 1+1=2,而是把 JWT顶尖的策略与创意,跟 Wunderman 优秀的数字能力整合到一起,给客户提供更 advanced(高效)的服务。我们已经不再去想团队里谁来自 Wunderman,谁来自 JWT,谁是新加入的成员。但你要我准确算的话,领导层方面,很巧地占比五十五十吧,这不是为了平衡,因为我们当初做决策并没有把它考虑在内。员工的话,我们主要看是否认可公司现有的发展方向,是否 buy in(认同)「数字+技术+创意」是我们未来要走的路。你想不想和公司一起去改变?如果你有心态有冲劲的话,你之前是哪家公司的,并不重要。大家上了同一艘船,就一起往一个方向前进。因为这一切的出发点都是客户的需求,以及管理层对公司未来发展的期盼。我们基于如何跟进想要的客户,以及我们如何增长现有的客户,加上我们现有的也并非完美的资源,思考如何去实现增长。 数英: 目前 Wunderman Thompson 的公司架构是怎样的?Carter:我们有好几个业务部门(事业部,Business Unit)和专家型功能部门(Center of Excellence),根据不同客户群体,业务部门会匹配到不同的功能部门来支持相应的业务需求。我们的电商部、数据部、技术部,以及 Customer Experience (用户体验)部在这一年成长非常快,属于专家型功能部门(Center of Excellence) 。不同类型的职能部门有自己的成长空间来面对客户,协助客户开发专项的机会点。而另一边的 Business Unit (事业部),包括客户执行、策略和创意的同事,他们了解客户的需求,然后根据需求配备到不同上述职能部门的团队。这个架构也许算不上很独特,但这个架构使得我们结构非常扁平,可以高效地完成搭配与产出。部门之间,都是一个互补,大家是平等的,一个合作性的交流。合作得好,产出效果好,客户买单多,业绩就会上去。合作得不好,就会有很多纠结和内耗。团队精神与团队文化,无疑对我们来说是很重要。2019 年 7 月 23 日,Wunderman Thompson 中国办公室在上海 WPP Campus 举行开业仪式数英: 在 Wunderman Thompson,创意隶属于事业部?专家型功能部的成员是什么背景?Carter : 创意和业务是相互捆绑的,并且创意精神的传递对专家职能部门的同事也是有必要的。大多数情况我们的创意团队要拉上技术、用户体验、媒体、数据的同事共同完成项目提案。另外,现在做创意单靠一支创意视频打天下的机会愈来愈少,想要用好创意,必须要匹配不同职能的专家来协助。我们的专家型功能部门在不同职能上人员背景一定是有所不同,分析师要能做模型,技术师必须能写代码。这种 hard tech 的技能我不担心,但我希望大家除了本职之外都可以有些不一样的特长,还可以在这里做一些自己向往的工作。比如我们一位 90 后的策略就对媒体非常感兴趣。我觉得这很好,就把他的一部分工作跨越到媒体与策略结合的内容中去。 数英: 关于员工对 Wunderman Thompson 新厂牌的文化认同,您觉得大家都适应得怎么样?作为 CEO,您有没有听过大家的一些反馈?Carter:文化是一个需要感受的东西,不能逼不能打,整天喊口号也没意思。Wunderman Thompson 在全球范围内的企业文化是「we’re in it together 我们在一起」,强调团队精神,也许个别的英雄主义还会存在,但我希望能从自己的位置出发用行动来带动这个转变。适应程度上我认为还是很乐观的,你看 WPP 大楼的空间已经非常有限了,我们的团队也在不断补充资源,大家的士气也很好,特别是新加入的同学都非常拼。我和员工的沟通还是蛮多的,办公室的门基本上一直敞开,我希望能和员工零距离。也许偶尔对我有五花八门的说法,毕竟带领几百人的团队不可能保证 100% 的满意。我的工作是要想办法把这些正力量捆绑在一起往前推。Carter 在中秋节前夕给员工派发月饼 Wunderman Thompson 上海办公室宠物日,右边最下方是 Carter 的狗狗数英: 合并至今,Wunderman Thompson 在业务执行方面是不是已经比较流畅了?客户也比较满意?Carter:在 12 个月里我已经蛮明显能感受到我们想要实行的想法。疫情虽然给到我们一些限制,但对于 2021 年我还是十分积极与期待的:目前 9 月份我们在做的很多工作都是为了明年春天做铺垫,并且都已经进行得差不多了。过去一年我不能说百分百满分,必定会有需要继续优化和改进的地方,但已经比我想象的更成功,某些想法基本上已经达成了,但也是还要继续努力:市场不等人,本土化的竞争对手也不等人,4A 的转型更不等人。 数英: 数英之前发表过一篇题为《他们的 JWT 往事,无法复制的智威汤逊》的文章,采访了许多前 JWT 人,大家纷纷表示对老厂牌的怀念。您也曾离开过 JWT,然后又回来,再见证它成为一个全新的公司。您自己在心境上有没有什么变化?Carter:这篇文章也的确打动了我:有这么多好的同事,好的过去,情怀和历史都是我们该牢记的一部分。这的确已经不是之前的 JWT,我们是未来的 Wunderman Thompson。未来的 Wunderman Thompson 一定会有之前的 DNA,那我们能不能把 DNA 里面最好的东西提取出来,把新的 DNA 混合一起,去适应到现在或是未来市场的环境里?能突飞猛进才是我觉得应该去做的事情,「take the best and Look forward(提炼最优,向前看)」,这就是一个进化的过程。 国际 4A 的生存现状中国市场的独特性体现在消费者和生态环境,如电商、技术、数字环境等等。如果一个国际企业没有真正了解中国市场,那么品牌就不会跟你合作太久。 数英: 近 10 年来有很多本土创意机构快速崛起与成长,给国际 4A 带来了不少的竞争压力。您如何看待这个状况?Carter:我非常佩服这些本土初创企业和热店。往往你听到初创企业,会觉得他们可能不是很大,但其实这些公司有的已经挺庞大了,而且成长非常快。有评论说他们的崛起会导致 4A 的衰退或者灭亡,我倒没那么悲观:这句话大概从他们开始崛起到今天,讲了十几年。我觉得没问题:竞争是市场的必然状况。很荣幸这其中很多企业家有我之前的同事,他们从 4A 带去了很多经验和做法到初创企业中,我同时在他们身上学到很多东西,至今我仍然跟这些企业家保持着密切的沟通。4A 如果不改变,的确会衰退,因此我觉得 4A 与他们是一个互相学习和成长优化的关系。看到他们的崛起,一方面我为他们高兴,但另一方面我认为这些做法并不是百分百适合每一家公司。公司是否传承创始人的意志,运营模式是否能长久维持,都是需要大家共同努力和期待的。我们可以回首 JWT,作为世界上第一家广告公司,这家国际 4A 的历史可以延伸 150 多年,本土企业也一定也可以做到。 创始人早晚会离开,但厂牌如何延续,是他们要考虑的问题。 数英: 您觉得目前 4A 适应及调整得怎么样了?Carter:我只能点评自己的公司,只要我们坚持用积极心态面对问题,用灵活的方法面对挑战,一定会做的更好。当然不是每个 4A 的 CEO 都跟我想法一样。有的公司可能比我们起步更早,做整合更早,他们就可能是做得更好一点,而有些还没起步,我也看到有些确实在衰退。但我真的是不能去评估人家,但最起码 Wunderman Thompson 在市场上是非常有竞争力的,特别是在 4A 层面。 数英: 目前品牌对国际 4A 的需求,您觉得主要在哪些方面?4A 的国际体系,在当下市场上的竞争优势是什么?Carter : 用谁并不重要,只要你能帮助他们做品牌提升,销量提升,拉近消费者距离等,他们不会在意你是 4A 还是热店,国际还是本土,WT 还是其他公司。4A 体系的竞争优势在于积累国际知识和资源做广告。可是中国市场的独特性体现在消费者和生态环境,如电商、技术、数字环境等等。如果一个国际企业没有真正了解中国市场,那么品牌就不会跟你合作太久。Wunderman Thompson 全球 CEO Mel Edwards 2019 年到访上海办公室数英: 那么 Wunderman Thompson 目前在市场上的竞争优势,您觉得在哪一点上最为突显?Carter:现在很多客户已经不想个别化不同的代理机构,marketing communication(市场营销传播)、brand communication(品牌传播),以及消费者沟通,这整个业务链条你都必须要帮他一起搞定。我们的竞争点在于从头部的品牌定位,到将创意、数据、技术三者融为一体,实现概念的落地,进而帮助到客户。从策略洞察,到完整去落地到消费者的互动体验,是我们的优势。 数英: 在人才的吸引、培养、留存上,Wunderman Thompson 有没有特别的方法?Carter : 我们有一个培训体系——Wunderman Thompson 大学。公司的大师们会亲自或是邀请客户给大家提供一些分享课程。另外之前我们的员工有机会出到国外,和同样级别或是有同样热情的同事一起接受培训,这是非常独特的机会,也是 4A 能给到大家而非本地的公司可能不能给到的东西。今年因为疫情,我们做了很多线上课程,但希望明年这些都能逐步开放回来。我觉得对于应届毕业生或者年轻的入行者,努力发挥自己的热情是最重要的,而非一定要专业技能。如果你对创意、数字、科技,整体来说有兴趣,加上想要发挥自我, Wunderman Thompson 就会是一个给到你施展空间的土壤。你可以有五花八门的爱好,不是说必须考相应的资格证。噢当然,如果你要进财务部的话,最好对数字还是敏感一点啦。Wunderman Thompson 亚太区首席创意官劳双恩(SheungYan Lo )在公司创意分享会数英: 疫情这一年 Wunderman Thompson 有没有一定的离职率,或者是部门裁员?Carter : Wunderman Thompson 在北上广的同事加在一起大概 450 多人,这么大的规模一定是会有一个自然的流失率,同时也必须有不断新增的人才。如果有的同仁不太认同我们的发展规划,碰到其他适合自己的机会而离开,这并非是一件坏事。包括我自己吧也是十几年前离开过 JWT,离开时我也没有消极的情绪,反而至今一直觉得在这家公司我结识了很多良师益友,十几年后我再回来,其中很多人都还在。我的家并不在上海,但这里就像家庭一样。你当然可以走,但不等于说不能回来。我们接下去也会有几位之前离开的同事又回归的:外面闯了一下,觉得还是家里好,这我们是非常欢迎的。 时代趋势之下的商业、广告、创意现在一个好的创意脱颖而出越来越难,因为市场太碎片化了,项目可能上三个礼拜结束了,你就永远被埋没了。在这样的环境里跳出来,才考验功力。 数英: 目前 Wunderman Thompson 跟品牌合作的模式,是项目制比较多,还是年度业务比较多?一些预算比较少的小型项目,你们会承接吗?Carter : 比例大概是 50/50,每样东西都有利有弊:年度合作主要是稳定,但太稳定也不一定是最好的,就看去怎样去面对。我也想让团队有接触到不同的机会点,同时也有热情去做一些新的东西,而不是说整天就卡在同一个位置上,那也不利于创新。一些投资型的项目,如果没有我们能展现拳脚的机会,同时预算上没有太多的空间,那对公司来说,就不是一个好的机会。但如果是说客户真的想和我们一起成长,有创新(innovation)的空间,就可以去尝试,一起去投资,去发展,去开发一些新的东西。其实有时候一些项目我们是亏着做的,但是出来的结果是大家 proud of these brands(为这些品牌感到骄傲)。2020 年 Wunderman Thompson 中国区创意作品集锦(48 秒) 数英: Wunderman Thompson 成立以来,我们也看到推出的不少有趣案例,都涉及到数据与创意的融合。这两块在贵公司,具体是如何协作的?有遇到过冲突吗?Carter : 拿我们 MAC 线下体验店这个案例,其实是 Wunderman Thompson 非常全面的功能性展现:首先必须了解消费者的洞察是什么,如今大家怎么跟化妆品互动,现在在网上碰到什么问题,在线下碰到什么问题,这些与市场调研,其实在这一部分数据已经开始介入了。策略定好以后,那我们要怎么改他的体验?包括创意、技术、social,就会进来把整个用户体验会做了一新。数据还会去说,其实如果我们改变的话,会导致到怎么样的结果。MAC 这个店,其实从线下体验设计,到每一样产品的扫码,我们帮他们从头到尾做好,期间配合了不少部门,缺一不可。MAC Cosmetics Experience Center MAC 用户体验中心项目Wunderman Thompson 在 2019 年为 MAC 打造的线上与线下联动试点门店我不认为数据与创意在本质上会冲突,只是在具体解决方案的时候,是否会有摩擦。创意如果能利用数据的辅助,进而有一个提升,其实会更好。很多创意人士跟我说,如果你看 20 年前他们做很多创意,是没有依据的。好跟坏你怎么知道?只能靠你的本事去卖是很感性的,就像《Mad Man 广告狂人》里面非常有说服力的创意头。但现在不一样了:数据是可以改变业务上的需求,或者说就是品牌的需求。有了数据支持,如果我们去做十分有力的创意,还可以降低媒体投放的一些费用。我觉得如果数据和创意冲突,也不是一个坏事情:在摩擦的时候才会真正出火花,可是多度摩擦就是内耗了。 数英: 您现在如何去评估一支广告的好与坏,这个标准跟过去相比发生改变了吗?这两年有没有特别打动您的广告作品?Carter : 我觉得还是独特性,是否能产生共鸣。劳双恩说的「情理之内,意料之外」,我觉得非常重要。但现在一个好的创意脱颖而出越来越难,因为市场太碎片化了,项目可能上三个礼拜结束了,你就永远被埋没了。在这样的环境里跳出来,才考验功力。我这几年也一直在评一些国内的奖,我很喜欢敦煌丝巾这个项目,我真没想到一个这么古老的文化资产,能用科技、微信,去制作这些原有的素材,提升到一个现代跟古老文化的结合,加上使用了社交媒体跟电商平台,整个案子做的还是非常显眼。我们 2020 年也推进了很多好的项目,希望明年继续有更多耀眼的作品呈现。数英: 您是希望说 Wunderman Thompson 能够出一些影响力更持久的作品,还是说去顺应时代出一些爆款? Carter : 两个我们都在做。爆款型是一定要做的,因为这是受现有市场所需,包括销售环境也好,MCN 带货等等。我们的数据部门和业务部门也在制作一个「如何打造爆款」的方法论。另外我们也想在市场上留下一些持久的作品,或是改变行业的案例。像上述所说的 MAC 是我们 19 年做的,在行业里其实蛮少见。2021 年我们会在这个基础上有很多提升,一些内容我现在不方便透露,我们的业务、创意、科技团队已经在研发了。 数英: 您觉得流量时代聊品牌,还有价值吗?Wunderman Thompson 会不会给客户提出一些品牌发展上的建议?Carter: 流量时代必须要聊品牌。单靠直播带货或者是流量能产生品牌短期利益,但不一定会持久。我们共同的挑战往往是能否做品牌的同时又带动流量与销售。 数英: 您在 4A 体系之中二十余年,是基于怎样的机缘?想过要离开吗?平时不工作的时候您会做些什么?Carter: 这也是一个缘分。我大学毕业的时候其实对广告没有多大概念,但对创意,尤其是 Storytelling (故事叙述) 蛮好奇的,进入这个行业以后我非常有满足感。我也是从非常基层的 AE 角色开始做起,了解到每个部门真正能做什么、不能做什么,以及结构上哪些运作模式是好还是坏。当然每个人都可以有不同的走法,但这些经历给我打牢了地基,去寻求一个平衡点,思考未来我们应该怎么改变。二十年间忐忐忑忑,我还是非常开心。过程中碰到比我优秀的、更有想法的老师或是同事,遇得多了也学到很多。这个领域里我非常荣幸能碰到这么多良师好友,中国区的大咖很多我都有幸合作过。我希望可以吸取到他们身上的一些优点,发挥在 Wunderman Thompson 上。这个行业真的能让我接触到很多新鲜的东西,让我保持一颗年轻的心,会经常去尝试一些新的东西。五、六年前我开始跟哔哩哔哩接触,那个时候真的不懂什么是二次元,包括像近几年火的抖音等等。我们有很多 90 后的同事,加上前辈给到我的一些辅助,使我非常热爱这个行业。Wunderman Thompson 上海团队在迪士尼有过困难的时候,也有过心酸的时候,离开 4A 体系的机会我也有过,比如甲方或者丙方的媒体平台。但我真的很喜欢现在这个行业,我们还有更加多的发展空间。对我来说,工作之余子女的成长还是非常重要的。对我来说下一代的成长不一定希望他们考上哈佛牛津,而是希望他们的成长有家长在身边培育。做好一个称职的父亲跟丈夫,对我来说还是蛮重要的。 数英: 身处风起云涌的广告营销行业,您如何看待未知与冒险?Carter : 很多东西都是未知的,我们必须去面对。当然我也能先知明年的一些情况,可好玩的就是,你用你的判断能力去预测未知,然后去看说怎么调整。我觉得这是在评估你的判断能力跟执行能力:如果你判断是错的,执行又不行,对公司和个人发展都不利。二十几年走下来,我是看到了自己一步一步从一个职位到下一个职位,是看到一个思路跟方向,然后也去执行一些东西。一定有人比我更成功,但你只要走好你的路,做好你必须做的,才能真正面对未知。在合理的情况上,我们必须要做一些冒险,去尝试不同的东西。但我不觉得无谓的冒险是负责任的:我们说到底还是有一个 400 多人的公司,人家今天家里上有老下有小,你还是要为大家好的情况下去做一些推动和冒险。可是不做冒险,不创新的话,也会往后退。所以还是一个平衡,以及一步一步有计划性的往前走。(完)采访合影(右起):Carter、Choco、Yi L.
本文系作者授权数英发表,内容为作者独立观点,不代表数英立场。转载请在文章开头和结尾显眼处标注:作者、出处和链接。不按规范转载侵权必究。
本文系作者授权数英发表,内容为作者独立观点,不代表数英立场。未经授权严禁转载,授权事宜请联系作者本人,侵权必究。
本内容为作者独立观点,不代表数英立场。本文禁止转载,侵权必究。
本文系数英原创,未经允许不得转载。授权事宜请至数英微信公众号(ID: digitaling) 后台授权,侵权必究。
扫描,分享朋友圈
收藏 32
126
相关推荐
他们的JWT往事,无法复制的智威汤逊
专访JWT数字长吴庆彬:好的广告,永远是吸引消费者多看一分钟
从业37年,顶尖创意人陈耀福为何卸下过去,再出发?
专访:日本电通执行创意总监佐佐木康晴,展望数字广告新纪元
专访HAVAS全球创意总裁:机器或AI无法提出伟大的创意
参与评论
文明发言,无意义评论将很快被删除,异常行为可能被禁言
登录后参与评论
参与评论
文明发言,无意义评论将很快被删除,异常行为可能被禁言
800
发布
推荐评论
全部评论(5条)
该文章被推荐至特色专栏:
人物专访
有料的人,为你打开新思路
作者
Yi L.
编辑数英 DIGITALING
他关注的人
他的文章 更多
他的项目 更多
近期精选文章更多
更多
猜您可能喜欢
人物专访
周世雄
Wunderman Thompson
伟门智威
观点洞察
营销
趋势创新
4A
近期最多收藏
近期最多赞
点击查看更多
数英App扫一扫登录
个人登录
该用户邮箱不存在,请重试!
请输入密码!
登 录
忘记密码?新用户立即注册
数英App扫码,安全登录
打开数英App扫一扫登录
密码登录新注册
资料更新成功!
查看人才库取消
私信
还可以输入300字发布
查看我认领的项目
关闭
查看收藏夹
举报
您为什么要举报此信息?
广告欺诈
淫秽色情
侵权
骚扰、辱骂、歧视
反动、政治敏感
违法犯罪
其它
请输入举报内容
提交取消
关于
关于我们
合作伙伴
手机客户端
加入我们
联系
联系我们
商务合作
广告刊例
投稿
相关信息
帮助中心
意见反馈
用户协议
版权声明
联系客服
关注微信,一起数字进行时
手机扫一扫,下载数英APP
手机扫一扫,下载数英APP
数英网 DIGITALING © 2024沪ICP备13019248号-4沪公网安备31010702001522号
WT Microelectronics |
WT Microelectronics |
English
繁體中文 (Chinese (Traditional))
简体中文 (Chinese (Simplified))
||
WT Microelectronics
About Us
WT Profile
Organization & Leadership
Core Values & Business Philosophy
Awards
Locations
Contact Us
Line Card
Investor Relations
Financials
Monthly Sales
Quarterly Results
Financial Reports
Annual Reports
Shareholder Services
Shareholders’ Meeting
Dividend History
Stock Quotes
Material Information
Contacts
Corporate Governance
Structure
Board of Directors
Profiles
Major Resolutions
Functional Committees
Audit Committee
Remuneration Committee
Nominating Committee
Sustainable Development Committee
Major Policies
Risk Management
Operational Risks
Financial Risks
Information Security Risks
Environmental Risks
Intellectual Property Management
Internal Audit
Stakeholders
Corporate Governance Lecture Series
Corporate Governance Lecture Series 1
Corporate Governance Lecture Series 2
Corporate Governance Lecture Series 3
Corporate Governance Lecture Series 4
Corporate Governance Lecture Series 5
Corporate Governance Lecture Series 6
Corporate Governance Lecture Series 7
Corporate Governance Lecture Series 8
Sustainability
ESG Report
Press Center
Human Resources
Staff Recruitment
Training and Development
Compensation and Benefits
Environment and Safety
Job Opportunities
MENU
CLOSE
back
Focus on core business to
go beyond excellence
Facilitate a smarter and more convenient world
Turn electronic
components into end products
Your valued distribution partner
Strengthen the mechanism of
corporate governance
Establish the foundation of sustainable management
Give back to society by
promoting diversified learning
Care and educate the vulnerable groups to create a better world
Join WT to pursue a brilliant life
Work together to create infinite possibilities
Focus on core business to
go beyond excellence
Facilitate a smarter and more convenient world
Turn electronic
components into end products
Your valued distribution partner
Strengthen the mechanism of
corporate governance
Establish the foundation of sustainable management
Give back to society by
promoting diversified learning
Care and educate the vulnerable groups to create a better world
Join WT to pursue a brilliant life
Work together to create infinite possibilities
Support Applications
Industrial / Surveillance / Home ApplianceAutomotiveMedicalPC / Notebook / TabletNetworking / Mobile CommunicationConsumer / Imaging / Multimedia
Annual Focus Data
With years of effort and expertise,
we accomplished many record-breaking achievements in 2023.
Carried 60,000+types of components
Served 10,000+customers
Processed 700,000+orders
Delivered 25,000,000,000+chips
Created NT$594.5 billion in annual sales
Recent News
WT Microelectronics Announced Unaudited Monthly Sales for January 2024 Totaled Approximately NT$73.7 Billion or US$2,364 Million (2/7/2024)WT Microelectronics Announced Financial Results for the Fourth Quarter of 2023 (1/31/2024)WT Microelectronics Announced Unaudited Monthly Sales for December 2023 Totaled Approximately NT$58.8 Billion or US$1,881 Million, Setting New Records for Quarterly and Yearly Revenue (1/9/2024)WT Microelectronics Announced Unaudited Monthly Sales for November 2023 Totaled NT$63.3 Billion or US$1,990 Million (12/8/2023)WT Microelectronics Announced Unaudited Monthly Sales for October 2023 Totaled NT$67.6 Billion or US$2,120 Million, Set New Record for Monthly Revenue (11/9/2023)
Copyright© WT Microelectronics Co., Ltd., All Rights Reserved.
Home
Contact Us
Site Map
Bottom Menu 英文
威图电子机械是个什么样的公司,他们的机柜好在哪里?为啥市场上那么多“仿威图机柜”? - 知乎
威图电子机械是个什么样的公司,他们的机柜好在哪里?为啥市场上那么多“仿威图机柜”? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册机械威图电子机械是个什么样的公司,他们的机柜好在哪里?为啥市场上那么多“仿威图机柜”?我想既然有那么多人“仿”它,那说明这个公司还是很牛逼的。不过我不懂这个公司是如何把机柜这种看起来没啥技术含量的东西做的牛逼的?关注者13被浏览37,747关注问题写回答邀请回答好问题添加评论分享8 个回答默认排序匿名用户看到可以匿名回答这个问题就放心了,作为一个在威图拿到终生合同然后辞职的人来说对这个问题还是比较有发言权,本回答不吹不黑,如果觉得有侵权嫌疑,请联系本作者删除。首先,我就不说自己是哪一年进的WT(接下来都用WT代表威图),但是WT三任总裁时代都经历过,工作上也是从生产端慢慢走到销售端,相对来说对这个体制还是比较清楚。我之所以用“体制”去描述WT公司,是因为个人觉得WT作为一个外企整个管理太国企化了,一个很好的佐证就是当年面试去WT在度娘上搜索“WT怎么样”这个问题的时候,有一条回答就是WT比较适合养老,至今这个回答还能搜到。那么WT到底牛逼牛逼?牛逼是肯定的,但只在欧洲市场,也就是WT总部牛逼。一个数据对比下,在欧洲WT的市占率能做到80%以上(保守估计),整个中国市场空机柜的市场容量是200个亿,WT中国算上出口那一块的业务大概是12亿(2019年底大概数据),这个市占率是多少大家可以自己算算看。那么WT机柜到底好在哪里?好在标准化?电泳工艺?快速交付?你要是问WT体制内的人,我估计没几个人能跟你整明白到底好在哪里,因为他们自己都不知道。那么WT中国还能有12个亿的业务是怎么做起来的?和得益于很多跨国公司的全球供应链策略,很多欧洲企业在中国的分公司还是要求用WT的机柜,就是所谓的品牌指定,德国WT已经做好工作了。早些年WT的销售坐在办公室接电话都能接到生意,就是这么来的。WT国产化的产品跟同样德国进口的产品对比一下就会发现差别还是有的,就简单说一点,WT机柜样本上印的都是IP55,但是实际生产出来的到客户现场一测试就露馅了。最后来聊聊市面上为什么这么多“仿威图”,其实市面上这么多“仿威图”深入研究一下就发现跟WT都脱不了关系,WT是机柜市场上的黄埔军校,尤其这两年异军突起的SIP,就是WT前前GM搞起来的。说“仿威图”还是前些年的叫法,尤其是现在仿的最多的9折PS机柜,国内柜体厂家从最开始的仿制到近些年开始自主研发,市面上现在越来越多新型材的机柜,18折,21折...从仿到创新需要一个过程。所以这两年一直盛传WT核心16折TS框架专利期要过了,WT内部比较紧张对于友商会仿16折的机柜,其实大可不必担心,16折机柜肯定是目前市面上一个成熟的技术了,整个零部件供应链也很完善,做出来或者仿出来已经不是问题了。只是随着16折专利期一过,WT中国如果没有更核心的更有竞争力的核心产品出现,在这个竞争已经白热化的市场上,可能会举步维艰,况且一直有小道消息说德国不会把新的核心型材VX25的生产线投放在中国,而是准备投给市场表现更好的印度市场。以上内容看看能不能回答作者的问题,以下是我自己个人的一点看法:WT的优点:1.WT是一个很好的平台,对于垂直行业渗透的很好,能够挖掘到客户的真实需求,在行业上可以引导客户;2.产品标准化程度高,基本上机柜上能用到的附件都能找到,从机柜,IT,温控和配电,产品基本上能满足客户项目一站式采购;3.增值服务,比如WT的产品是含运费的,从上海运到上海和从上海运到新疆,产品的价格是一样。另外官网上的图纸,认证,机柜选型温控软件等都是免费向用户开放的。还有就是全面的技术服务,对于机柜上的任何问题,都可以找到WT的技术人员为你免费解答;WT的缺点:1.价格贵,非标货期长;2.闲职太多,结构不够扁平化,整个公司缺乏活力和斗志,得过且过的人太多,还是那句话做的做死,闲的闲死;3.整个管理层没有明确的方向,报告导向,不管落地,能向德国交差即可。管理层中不乏玩数字,溜须拍马,做PPT的高手。写这个回答仅供参考,作为一个曾经在WT体制下工作过的人,还是希望WT中国能向更好的方向发展,能做到真正的引导市场,成为行业的标杆。我是典型的怒其不争的心态,还有就是不要用人唯亲,对于能做些事情的老员工要善待,不要高薪招新人做的事情还比老人少,管理层要考核人员流动率。最后用度娘上搜到的一个回答结束,可以看出我还是很中立的回答这个问题,没有任何偏激的成分。以上回答仅代表个人意见,如果有侵犯,请联系作者删除!截屏引用自百度发布于 2020-03-18 10:30赞同 163 条评论分享收藏喜欢收起匿名用户呵呵,威图,靠着老牌子,忽悠国人一年又一年,没创新,安装不方便,价格还贵发布于 2016-09-07 17:42赞同 2添加评论分享收藏喜欢
Wunderman Thompson 中国_企业_数字媒体及职业招聘网站-数英网
Wunderman Thompson 中国_企业_数字媒体及职业招聘网站-数英网
登录注册企业入口
我的简历
我的人脉
关注
粉丝
关注企业
发布
发布文章
发布项目
收藏夹
收藏文章
收藏项目
收藏职位
客服
关注订阅
关注微信,一起数字进行时
数英Q群: 16588337 (满员)
数英二群: 32080189 (可申)
认证作者Q群: 168909472
APP
手机扫一扫,下载数英APP
企业全部文章项目职位人企业
首页
文章
全部
头条
精选
热文
特色专栏
项目
全部
每周项目精选
每月项目精选
海外项目精选
近期热门项目
近期最多收藏
全球奖库
招聘
全部
创意/设计
文案/策划
客户/市场
运营/产品
技术/制作
人
指数
课堂
数英奖
Wunderman Thompson 中国
上海 静安区
私信
2469
1912
点赞成功!
58
企业主页
招聘职位 27 文章 44 项目 27 职员 58 提及 4
我们隶属于WPP集团,以启发并促进雄心万丈的品牌不断增长为己任。集创意,咨询和技术于一身,我们的团队提供全球范围的全方位专业服务,为客户带来富有启发性的解决方案,跨越整个品牌和用户体验。我们总部位于美国纽约,在全球90个市场拥有超过20,000名创意、数字、策略和技术人才。
企业官网:https://www.wundermanthompson.com 总机:021****00显示 地址:上海 静安区 恒丰路399号达邦协作广场26楼
所属行业:营销咨询
企业规模:201-500人
创立年份:1994年 隶属于:WPP
合作过的企业
荣誉奖项
2021金投赏创意奖年度创意代理公司
2019Campaign AOYGreater China Integrated Marketing Agency of the Y
2018Cannes LionsAgency of the Year
2015Campaign AOYCreative Agency of the Year
企业文章
Wunderman Thompson发布《2023全球百大趋势报告》附下载
2023-05-09561588
未来一年全球的行业走向,和最值得关注的100种趋势。
伟门智威进一步扩大与日本航空的合作关系
2022-07-26
今年6月,WT正式成为日本航空(JAL)社交媒体年度服务供应商,扩大了与日航现有的创意代理合作关系。
伟门智威中国任命凌嘉为转型战略负责人
2022-03-011
为WT及其客户挖掘、启发和领导真正的品牌融合、整合和转型机会,应对未来挑战。
点击查看更多
企业项目
港风MV配情怀综艺,绿箭×毛不易魔性广告来袭!
Brand: WRIGLEY 箭牌
2022-06-1781
The AI Manga:用数据与科技致敬经典
Brand: KIOXIA
By: Wunderman Thompson 中国
2022-01-145
卡姿兰 x 敦煌博物馆跨界合作:色无忌惮 觉醒妆煌
Brand: CARSLAN 卡姿兰
By: Wunderman Thompson 中国
2022-01-1482
雅诗兰黛美旅星愿圈
Brand: Estée Lauder 雅诗兰黛
By: Wunderman Thompson 中国
2022-01-145
点击查看更多
提及它的文章
收藏!一文了解国际4A-全球6大广告传媒集团(2023年版)
2023-08-3134893
内附图谱。
他们的JWT往事,无法复制的智威汤逊
2020-07-2719325190
百年厂牌JWT,诞生了好多精彩往事!内含超珍贵资料。
从业37年,顶尖创意人陈耀福为何卸下过去,再出发?
2019-09-0312313530
来听一听曾拿下300多个创意奖、担任戛纳等多个国内外评委的大佬的故事。
点击查看更多
您可能感兴趣的人
热门企业
个人登录
该用户邮箱不存在,请重试!
请输入密码!
登 录
忘记密码?新用户立即注册
资料更新成功!
关于
关于我们
合作伙伴
手机客户端
加入我们
联系
联系我们
商务合作
广告刊例
投稿
相关信息
帮助中心
意见反馈
用户协议
版权声明
联系客服
关注微信,一起数字进行时
手机扫一扫,下载数英APP
手机扫一扫,下载数英APP
数英网 DIGITALING © 2024沪ICP备13019248号-4沪公网安备31010702001522号
文曄(文晔)科技 | 文曄(文晔)科技
文曄(文晔)科技 | 文曄(文晔)科技
English (英语)
繁體中文 (繁体中文)
简体中文
||
文曄(文晔)科技
关于文晔
公司简介
组织架构与经营团队
核心价值与经营理念
历年获奖与评比
文晔教育基金会
远乡视讯学堂
远乡闪闪
公司据点
联络我们
代理产品线
投资人关系
财务资讯
每月营业额报告
每季营运报告
财务报告
公司年报
股东专栏
股东会资讯
历年股利分派
股价资讯
重大讯息与公告
联络人
公司治理
公司治理架构
董事会
董事会组织与职责
董事会重大决议
功能性委员会
审计委员会
薪资报酬委员会
提名委员会
永续发展委员会
重要组织规章
风险管理
营运风险
财务风险
信息安全风险
环境风险
智慧财产管理
内部稽核
利害关系人专区
文晔治理讲座系列
文晔治理讲座系列一
文晔治理讲座系列二
文晔治理讲座系列三
文晔治理讲座系列四
文晔治理讲座系列五
文晔治理讲座系列六
文晔治理讲座系列七
文晔治理讲座系列八
企业永续
永续發展政策与倡议
董事长的话
环境
社会
治理
企业永续报告书
新闻中心
菁英招募
人员招募
培育与发展
薪酬与福利
环境与安全
工作机会
MENU
CLOSE
back
公司简介You are here:Home关于文晔公司简介
值得您託付的通路夥伴
文晔科技创立于1993年,作为提供全球专业电子零组件通路服务的领导厂商,文晔科技已成功将公司定位为半导体上下游间的最佳桥梁,提供最专业的供应链管理服务予原厂及客户,并且以「协助上游原厂订定产品行销方向、支援下游客户缩短研发时程」为目标,不断深化在产业链上创造附加价值的能力。
文晔科技营运总部设立于台湾,迄今已成功建立起绵密之行销通路。目前在中国、韩国、新加坡、印度、泰国、马来西亚、越南等地区共有五十多个营运据点。
二十多年来,文晔科技累积出扎实的技术实力,辅以判断未来产品趋势的能力,致力于串联上游原厂的零组件特性与下游客户终端产品的功能需求,为原厂及客户提供最优化服务。
文晔科技代理全球一流半导体原厂超过80家,服务优质客户超过10,000家。所代理的电子零组件被广泛应用于通讯、电脑及周边、资料中心、消费性电子、工业控制、物联网及汽车等多样应用领域。秉持着稳健扎实的营运风格,2023年文晔科技全年营收达新台币5,945亿元。
文曄的服務項目
專業供應鏈管理加值型技術支援拓展元件應用市場加速產品研發時程
Copyright© WT Microelectronics Co., Ltd., All Rights Reserved.
首页
联络我们
网站地图
頁尾選單 - 簡體
上海外滩W酒店 (上海市) - 968条旅客点评与比价
W酒店 (上海市) - 968条旅客点评与比价
机票
美食
景点玩乐
上海市旅游上海市酒店上海市民宿上海市机票价格上海市餐厅上海市景点上海市照片上海市地图上海市所有酒店上海市酒店优惠上海市限时优惠酒店上海外滩W酒店附近酒店按酒店类别上海市 的汽车旅馆上海市青年旅舍上海市露营地上海市商务酒店上海市 Spa 度假村上海市豪华酒店上海市浪漫酒店上海市的热门家庭酒店上海市绿色酒店上海市度假村上海市赌场上海市海滩酒店按酒店星级上海市的 5 星级酒店上海市的 4 星级酒店上海市的 3 星级酒店按酒店品牌 上海市Mandarin Hotels 上海市金广快捷酒店 上海市万丽酒店 上海市宜必思酒店 上海市The Leading Hotels Of The World 上海市Radisson酒店 上海市Louvre Hotels 上海市万豪酒店 上海市凯悦酒店 上海市雅高酒店 上海市Wyndham酒店 上海市希尔顿酒店人气设施附设泳池的上海市酒店可免费停车的上海市酒店可携带宠物的上海市酒店热门周围地区浦西(上海市区)酒店静安区酒店石门二路酒店黄浦区酒店浦东新区酒店外滩酒店福州路酒店陆家嘴酒店长宁区酒店古北区 / 虹桥区 / 闵行区酒店外滩的热门家庭酒店人气上海市类别上海市游轮港口酒店上海市提供代客泊车服务的酒店上海市设有蒸汽浴室的酒店上海市提供隔音客房的酒店上海市设有游戏室的酒店上海市设有酒廊的酒店上海市设有蜜月套房的酒店上海市提供自行车租赁服务的酒店上海市提供桑拿的酒店上海市有屋顶酒吧的酒店地标附近非常时髦酒吧附近酒店1933老场坊附近酒店Chinese Securities Museum附近酒店北外滩地区附近酒店外白渡桥附近酒店乍浦路桥附近酒店外滩历史记念馆附近酒店上海人民英雄纪念塔附近酒店外滩情人墙附近酒店火车/地铁站附近国际客运中心站附近酒店提篮桥站附近酒店臨平路站附近酒店楊樹浦路站附近酒店浦东大道站附近酒店浦東Avenu站附近酒店大連路站附近酒店陸家嘴站附近酒店東昌路站附近酒店德平路站附近酒店机场附近上海浦东国际机场酒店上海虹桥国际机场酒店高校附近Tongji University附近酒店Fudan University附近酒店Shanghai International Studies University附近酒店East China Normal University附近酒店Shanghai Ouhua Vocational Technical College附近酒店East China University of Science and Technology附近酒店探索更多热门酒店八星皇宫酒店丽江金茂璞修雪山酒店滨海湾金沙酒店洛杉矶小台北客栈九龙香格里拉大酒店邦邦岛龙珠度假村星野TOMAMU度假村塔娃大酒店钓鱼台国宾馆迪拜帆船酒店海景酒店(海韵轩)友谊宾馆古藏殊华供氧客栈 拉萨大昭寺古城店水立方国际水疗会国际酒店香港天际万豪酒店跟团游览应用程序绿色领袖跳转到主要内容发现旅行点评数USD登录 收件箱 查看全部 登录即可接收旅行更新和向其他旅行者发送信息。 上海市 酒店 景点玩乐 美食 机票 旅行故事 邮轮 跟团游览 添加地点 航空公司 旅行者之选 帮助中心
亚洲 中国 上海地区 上海市 上海市酒店
搜索 上海外滩W酒店 (上海市) W Shanghai - The Bund5.0 分,共 5 分1,831 条点评在 上海市 的 2,559 家酒店中排名第 35200080 中国 上海市 旅顺路66号访问酒店网站写点评查看空房情况 全屏查看所有照片 (3,881)3,881 旅客 (3767) 客房和套房 (1020) 餐饮 (391) 旅行者之选是什么?Tripadvisor 会将旅行者之选大奖颁发给持续获得旅行者好评,并在 Tripadvisor 位列前 10%的酒店、景点和餐厅。查看您旅行日期的价格可享受 Marriott Bonvoy 会员价登录以查看入住— / — / —退房— / — / —客人1 间客房,2 位成人,0 名儿童酒店直接优惠!点击查看详情可在 3月16日周六之前全额退款无需预付款立即通过万豪旅享家预订US$337查看优惠价格由我们的合作伙伴提供,反映每晚平均房费,包含合作伙伴已知且预订时需缴纳的固定税费。其他不固定或无需在预订时缴纳的杂税和酒店费用可在入住时向企业支付。 详情请咨询我们的合作伙伴。 关于5.0很棒1,831 条点评在 上海市 的 2,559 家酒店中排名第 35地点卫生与卫生服务优惠度旅行者之选上海外滩W酒店是一家坐落于北外滩的风格酒店。374间客房及套房,坐拥令人惊叹的外滩景致,打造极致入住体验。五间风格各异的餐厅酒吧,水疗中心及室内外泳池让宾客纵享非凡乐趣。 阅读更多建议修改以优化页面内容。完善此详情页酒店设施免费停车免费上网游泳池有健身房的健身中心酒吧/酒廊儿童免费入住机场交通提供上网服务的商务中心停车WiFi热水浴缸泳池/海滩毛巾景观泳池室内泳池室外泳池恒温泳池健身/Spa 更衣室健身课程餐厅提供早餐自助早餐客房内早餐户外用餐区域葡萄酒/香槟池滨酒吧池畔酒吧屋顶酒吧汽车出租出租车服务会议设施宴会厅会议室Spa身体裹敷情侣按摩面部护理足浴按摩沙龙蒸汽浴室屋顶露台24 小时安保服务行李寄存礼宾部外汇兑换礼品店报纸无烟酒店户外家具共用休息室/电视区阳光甲板太阳椅/海滩椅酒店内 ATM门童24 小时前台服务洗衣服务显示更多客房特色无过敏房浴衣空调办公桌咖啡机/茶壶有线/卫星电视沙发床步入式淋浴间客房整理服务客房服务保险箱座位区沙发电话瓶装水熨斗迷你吧冰箱平板电视点播电影收音机iPod 坞站浴缸/淋浴免费洗漱用品吹风机显示更多房型城市景观地标景观蜜月套房无烟房套房家庭房酒店信息酒店星级5.0分酒店风格风景优美新奇酒店所说语言中文, 英语, 法语, 德语酒店链接访问酒店网站特价:点击查看详情酒店优惠信息位置200080 中国 上海市 旅顺路66号上海外滩W酒店如何前往相对适合步行评分:78/10078上海浦东国际机场31.8公里•查看所有航班上海虹桥国际机场16.2公里•查看所有航班国际客运中心3分钟租车查看所有的上海市租车查看附近所有酒店142 家餐厅1 公里内在地图上查看WOOBAR酒吧1201分钟•¥¥¥¥•酒吧餐新大陆中国厨房2537分钟•¥¥¥¥•中餐标帜餐厅 (上海外滩W酒店)811分钟•¥¥¥¥•各国料理星巴克上海滨江店7311分钟•¥¥ - ¥¥¥•咖啡馆查看附近所有餐厅14 处景点1 公里内在地图上查看非常时髦酒吧4577分钟•酒吧与夜店1933老场坊29210分钟•建筑物外白渡桥14911分钟•桥梁东方明珠游船码头17912分钟•游艇码头查看附近所有景点1,831 条点评11问答0 个房间贴士点评写点评旅行者评分很棒1,657好93一般29较差23很差32时节3 月到 5 月6 月到 8 月9 月到 11 月12 月到 2 月旅行者类型家庭情侣单人商务朋友语言所有语言(1,834)中文(简体)(968)英语(801)中文(繁体)(768)更多已选筛选条件筛选中文(简体)Tripadvisor 会员 写了一条点评 昨天 上海外滩w酒店真不错来入住上海w外滩前台小姐姐Lily安排的很好体验感很高服务很好Lily小姐姐很热情友好大方又漂亮下次还选择这里下次会和朋友分享的哈哈哈哈哈哈阅读更多入住日期:2024年3月旅行类型: 好友旅行此点评为个人旅行者所写的主观评论,并不代表 Tripadvisor LLC 或其合作伙伴的观点。 Tripadvisor 对点评进行检查。推荐分享 Tripadvisor 会员 写了一条点评 3月5日 感谢最近上海一直在下雨 退房的时候没拿伞 谢谢Cecilia和Sienna提醒我外面又开始下雨了 建议我带雨伞出门 我才想起来了我的伞还在房间内!赶紧回去取伞!非常非常谢谢Cecilia和Sienna的提醒!阅读更多入住日期:2024年3月旅行类型: 好友旅行此点评为个人旅行者所写的主观评论,并不代表 Tripadvisor LLC 或其合作伙伴的观点。 Tripadvisor 对点评进行检查。推荐分享 回复来自上海外滩W酒店的Guest Services / Front OfficeTerry Zheng回复时间:昨天亲爱的Fearless17913488861, 感谢您入住上海外滩W酒店,您对我们酒店的喜爱使我们备感荣幸!很高兴得知您在入住期间度过了美好难忘的时光,对我们的英才所提供的服务加以赞许。我们的英才Cecilia和Sienna已收到您的认可,所有英才也将继续W酒店随时随需的服务理念,为您提供非凡体验。我们期待很快可以与您再次相遇,与我们一起撩动魔都! Cheers阅读更多此回复为企业代表所写的主观评论,并不代表 TripAdvisor LLC 或其合作伙伴的观点。Tripadvisor 会员 写了一条点评 2024年2月 W入住体验非常好早餐特别好!!服务也很不错,礼宾部很热情~大家都很好,早餐真的很丰盛,吃过那么多的早餐最丰盛的,推荐大家入住阅读更多入住日期:2024年2月旅行类型: 家庭旅行此点评为个人旅行者所写的主观评论,并不代表 Tripadvisor LLC 或其合作伙伴的观点。 Tripadvisor 对点评进行检查。推荐分享 回复来自上海外滩W酒店的MarketingW Shanghai - The Bund回复时间:1周前亲爱的Jet38014405149 感谢您入住上海外滩W酒店,您对我们酒店的喜爱使我们备感荣幸!很高兴得知您在入住期间度过了美好难忘的时光,对我们的服务加以赞许。我们礼宾部的英才已收到您的认可,所有英才也将继续W酒店随时随需的服务理念,为您提供非凡体验。我们期待很快可以与您再次相遇,与我们一起撩动魔都! Cheers阅读更多此回复为企业代表所写的主观评论,并不代表 TripAdvisor LLC 或其合作伙伴的观点。Tripadvisor 会员 写了一条点评 2024年2月 喜欢上海外滩酒店这里服务很好感谢lily的服务下次还会再来会跟朋友介绍这里的喜欢这里的风格员工很热情酒店很潮流跟朋友来很开心的哈哈哈哈哈哈哈阅读更多入住日期:2024年2月旅行类型: 好友旅行此点评为个人旅行者所写的主观评论,并不代表 Tripadvisor LLC 或其合作伙伴的观点。 Tripadvisor 对点评进行检查。推荐分享 回复来自上海外滩W酒店的MarketingW Shanghai - The Bund回复时间:2周前亲爱的GrandTour66265645977 感谢您入住上海外滩W酒店,您对我们酒店的喜爱使我们备感荣幸!很高兴得知您在入住期间度过了美好难忘的时光,对我们的景观和服务加以赞许。我们的英才Lily已收到您的认可,所有英才也将继续W酒店随时随需的服务理念,为您提供非凡体验。我们期待很快可以与您再次相遇,与我们一起撩动魔都! Cheers阅读更多此回复为企业代表所写的主观评论,并不代表 TripAdvisor LLC 或其合作伙伴的观点。Tripadvisor 会员 写了一条点评 2024年2月 来入住上海外滩w啦喜欢这里风格喜欢这里的服务房间景观超美感谢lily小姐的热情友好的招待给安排了很不错的房间下次还会来会跟朋友介绍的阅读更多入住日期:2024年2月旅行类型: 好友旅行此点评为个人旅行者所写的主观评论,并不代表 Tripadvisor LLC 或其合作伙伴的观点。 Tripadvisor 对点评进行检查。推荐分享 回复来自上海外滩W酒店的MarketingW Shanghai - The Bund回复时间:2周前亲爱的Quest08134260689 感谢您入住上海外滩W酒店,您对我们酒店的喜爱使我们备感荣幸!很高兴得知您在入住期间度过了美好难忘的时光,对我们的景观和服务加以赞许。我们的英才Lily已收到您的认可,所有英才也将继续W酒店随时随需的服务理念,为您提供非凡体验。我们期待很快可以与您再次相遇,与我们一起撩动魔都! Cheers阅读更多此回复为企业代表所写的主观评论,并不代表 TripAdvisor LLC 或其合作伙伴的观点。上一页下一页123456…这家企业不适合您?上海市地区还有很多地方可供选择。查看全部企业价位US$321 - US$353 (基于标准间的平均价格) 位置中国上海地区上海市提篮桥 / 浦西(上海市区) / 虹口区客房数量374价格由我们的合作伙伴提供,反映每晚平均房费,包含合作伙伴已知且预订时需缴纳的固定税费。其他不固定或无需在预订时缴纳的杂税和酒店费用可在入住时向企业支付。 详情请咨询我们的合作伙伴。这是您的 Tripadvisor 详情页吗?拥有或管理这家酒店? 免费获取您的详情页以便回复点评、更新资料或者进行其他操作。获取详情页上海外滩W酒店 (上海市) - 968条旅客点评与比价关于上海外滩W酒店的常见问题上海外滩W酒店附近有哪些热门景点? 附近的景点包括上海外滩(距此地 1.1 千米)、上海城市历史发展陈列馆(距此地 1.1 千米)和东方明珠(距此地 1.1 千米)。 查看附近所有景点。上海外滩W酒店有哪些物业设施? 酒店的热门设施包括室内游泳池、池滨酒吧和屋顶酒吧。 查看所有物业设施。上海外滩W酒店提供哪些客房设施? 热门房间设施包括小吧台、空调和平板电视。 查看所有客房设施。上海外滩W酒店提供哪些餐饮选项? 入住期间,客人可以在池滨酒吧、屋顶酒吧和餐厅享用美食。 了解更多。上海外滩W酒店可以停车吗? 是,客人可以使用免费停车。 了解更多。上海外滩W酒店附近有哪些餐厅? 交通便利的餐厅包括WOOBAR酒吧、Oceans和8 1/2 Otto e Mezzo BOMBANA。 查看附近所有餐厅。上海外滩W酒店设有锻炼设施吗? 是,客人可以在入住期间使用室内游泳池、健身中心和健身课程。 了解更多。上海外滩W酒店是否提供免费机场接送服务? 是,上海外滩W酒店为客人提供机场接送服务。 建议您提前致电确认细节。 了解更多。上海外滩W酒店提供商务服务吗? 是,酒店会提供便利的商务中心、会议室和宴会厅。 查看所有物业设施。上海外滩W酒店的员工使用哪几种语言? 员工使用多种语言,包括英语、法语、德语和汉语。 查看所有物业设施。上海外滩W酒店附近有任何历史景点吗? 许多旅行者热衷于参观静安寺(距此地 5.6 千米)、上海城隍庙(距此地 2.6 千米)和上海大韩民国临时政府旧址(距此地 4.0 千米)。 查看附近所有景点。想查看更多问答内容? 查看更多有关此酒店的 Tripadvisor 社区问答。US$ USD中文国际版© 2024 Tripadvisor LLC 保留所有权利。使用条款隐私和 Cookie 声明同意使用 Cookie网站地图网站工作原理联系我们部分照片由 VFM Leonardo 提供。网站的此版本通常面向中文使用者,除非有针对其国家或地区的特定网站版本存在。 您可以使用下拉式菜单访问 Tripadvisor 网站面向特定国家或地区的其他版本。 更多