導航:首頁 > 集團股份 > claro集團

claro集團

發布時間:2021-01-29 14:21:30

1. 中國對外貿易中心(集團) 筆試 廣州

Gridx 脫離了 DataGrid 的框架,具有高度模塊化的設計,使其能適應各種使用場景的需要。大量針對 DataGrid/EnhancedGrid
的問題而做出的設計上的改進使 Gridx 具有更高的穩定性和更好的性能。同時,API 的設計更直觀,且難以被誤用。本文從如何創建和使用 Gridx 入手介紹了
Gridx 的基本特點和基本用法,目的是讓您對 Gridx 有一個基本的了解。
[size=0.76em]准備工作

[size=0.76em]Gridx 是基於 Dojo 的開源項目,在 GitHub
或者其官網都可以下載到源碼包。下載解壓後將 gridx 文件夾置於與 dojo、dijit 和 dojox 等文件夾同級的目錄即可。目前 Gridx 支持
Dojo1.7+。

[size=0.76em]gridx/tests
文件夾中有大量的示例頁面,可以從修改這些示例頁面開始學習使用 Gridx。

[size=0.76em]回頁首

[size=0.76em]創建 Gridx

[size=0.76em]Gridx 繼承了
dijit._WidgetBase,因此其創建方式和其他 widget
類似,只是有一些必須指定的參數需要特別說明。

[size=0.76em]選用合適的 store 和
cache

[size=0.76em]Gridx 與 DataGrid 一樣,都以 Dojo 的
store 作為數據源。不過,Gridx 需要用戶指出所用的 store 是非同步的還是同步的。非同步 store
通常由伺服器端提供數據,向它請求數據時往往需要非同步地接收返回數據;而同步 store 的所有數據一般都在客戶端,因此所有的請求都能同步完成。非同步 store
往往會帶來更為復雜的邏輯,因此 Gridx 針對這兩種 store 分別進行了優化。但由於無法從 store
本身得知它是否非同步,同時為了減小代碼量,用戶需要將這個信息告知 Gridx。告知的方法是設置 cacheClass
參數:
清單 1. 創建 Gridx 並配置 cacheClass 參數

require([ "gridx/Grid",
"gridx/core/model/cache/Sync", ...... "dojo/domReady!" ],
function(Gridx, Cache, ......){ ...... var grid = new Gridx({
cacheClass: Cache store: store, ...... });
grid.placeAt('gridContainerNode'); grid.startup(); });

[size=0.76em]目前 Gridx 有兩種 cache
實現:gridx/core/model/cache/Sync 和 gridx/core/model/cache/Async,前者用於同步
store,後者用於非同步 store。Async 的實現邏輯比 Sync
要復雜得多,這是因為它需要考慮數據的延遲載入。這樣,如果用戶的應用只需要客戶端數據,就完全不必用到關於延遲載入的代碼,從而減小了最終下載到瀏覽器的代碼量。

[size=0.76em]cacheClass 既可以直接接受 cache
實現的構造函數(如上例),也可以接受 MID,例如:

[size=0.76em]清單 2. 用 MID 設置 cacheClass
參數

var grid = new Gridx({ cacheClass:
"gridx/core/model/cache/Async" ...... });

[size=0.76em]這種寫法更適合以 HTML 聲明的方式創建 Gridx
的場合,因為它不需要引入額外的變數。

[size=0.76em]目前 Gridx 能夠直接支持 dojo(x)/data/* 的老
store 以及 dojo/store/* 的新 store,而不需要任何適配轉換。常用的同步 store 有
dojo/data/ItemFileWriteStore 以及 dojo/store/Memory。常用的非同步 store 有
dojox/data/JsonRestStore、dojox/data/QueryReadStore 以及
dojo/store/JsonRest。

[size=0.76em]需要特別注意的是,Gridx 要求 store
中的數據行必須具有唯一標識符(ID)。對於老 store 而言,也就是必須要實現 dojo/data/api/Identity

一維數組結構的列聲明

var grid = new Gridx({ cacheClass:
Cache store: store, structure: [ {id: 'column1', ......},
{id: 'column2', ......}, {id: 'column3', ......}, ......
] });

[size=0.76em]下面各小節詳細介紹列聲明中各個屬性的含義。

[size=0.76em]id、name、field

[size=0.76em]對於 Gridx
來說,每一列都有一個唯一標識符(ID)。用戶最好能指定一些有意義的 ID,從而方便以後的使用。如果用戶沒有指定,那麼 Gridx 會分別賦予"1", "2",
"3", ....... 等字元串類型的自然數作為列的默認 ID。

[size=0.76em]與 DataGrid 類似,name
屬性是指表頭上顯示出來的列名。name 屬性可以是任意字元串,甚至可以包含 HTML 標簽,從而做出各種定製效果。例如:{id: 'column1',
name: '<b>Company
<i>Name</i></b>'}。

[size=0.76em]field 屬性也是從 DataGrid 沿襲下來的,指該列在
store 中的對應域。該列中的單元格會從這個 field 域中取得數據。

[size=0.76em]圖 1. name 屬性作為普通字元串、未指定、以及帶 HTML/CSS
的各種情況

[size=0.76em]formatter
函數

[size=0.76em]Gridx 的 formatter 函數與 DataGrid
中的同名函數不同,其目的在於為 Gridx 提供數據,而不是對數據做顯示上的修飾。如果某一列沒有 field 參數,就可以通過 formatter
函數來提供數據,例如:

[size=0.76em]清單 4. 使用 formatter
函數組合多個域的數據

{id: 'column1', formatter:
function(rawData){ return rawData.field1 + rawData.field2; });

[size=0.76em]這樣,這一列就能顯示兩個數據域的和。

[size=0.76em]圖 2. formatter 函數綜合多個數據域的內容產生了 Summary
列中的數據

[size=0.76em]formatter 函數所傳入的 rawData 參數是以
store 的 field 名稱作為 key
的關聯數組(對象),包含當前行中的所有數據,形如:

[size=0.76em]清單 5. rawData 格式

rawData: { field1: data1, field2:
data2, ...... }

[size=0.76em]這種形式要比某些 store(主要是老
store)的數據項(item)更容易使用,也使介面與新 store 保持一致。

[size=0.76em]decorator
函數

[size=0.76em]Gridx
對數據的產生和數據的修飾做了嚴格的區分。formatter 是用於產生數據,decorator
函數則用於修飾數據。例如:

[size=0.76em]清單 6. 用 decorator 函數為單元格添加
HTML/CSS

{id: 'column1', field: 'field1',
decorator: function(cellData, rowId, rowIndex){ return "<a
href='www.google.com?q=" + cellData + "'><b>" + cellData +
"</b></a>"; } }

[size=0.76em]這樣就能在單元格中顯示出鏈接。

[size=0.76em]圖 3. 使用 decorator
對數據做修飾

[size=0.76em]decorator 函數只能返回字元串,不像 DataGrid 的
formatter 函數還可以返回 widget 實例。關於如何在單元格中顯示 widget
的問題將在其他文章中詳細介紹。

[size=0.76em]style 和
class

[size=0.76em]通過在 decorator 函數中加入 HTML 標簽和
style 屬性可以對單元格中的內容做各種修飾,但無法改變單元格本身的樣式。要做到這一點,需要 style 或
class:

[size=0.76em]清單 7. 字元串形式的 style 和 class
參數

{id: 'column1', field: 'field1', style:
'text-align: center;', 'class': 'mySpecialColumn' }

[size=0.76em]style 和 class 都會直接加入到 <TD>
標簽的 style 屬性和 class 屬性。

[size=0.76em]style 和 class
還可以寫成一個返回字元串的函數,這樣單元格的樣式就能隨數據而變化:

[size=0.76em]清單 8. 函數形式的 style 和 class
參數

{id: 'column1', field: 'field1', style:
function(cell){ return cell.data() % 2 ? 'color: red;' : 'color:
blue;'; }, 'class': function(cell){ return cell.data() %2 ?
'oddClass' : 'evenClass'; } }

[size=0.76em]這里 style 和 class 函數所傳入的 cell
參數代表了當前所處理的單元格,可以通過各種方便的方法獲取有關該單元格的一切信息。

[size=0.76em]圖 4. 使用 style
函數為每一個單元格設置獨特背景色的例子

[size=0.76em]配置功能模塊

[size=0.76em]有了 store、cacheClass 和 structure
後,Gridx 就能運行了。不過這樣的 Gridx 除了顯示數據之外,幾乎沒有任何界面功能。Gridx
幾乎所有的功能都是由可選模塊(mole)實現的,需要在創建時聲明使用了那些模塊。這提供了巨大的靈活性來滿足各種不同的需求。

[size=0.76em]聲明模塊的是 moles
屬性:

[size=0.76em]清單
9. 通過 moles 參數配置功能模塊

require([ "gridx/Grid",
"gridx/core/model/cache/Sync", "gridx/moles/VirtualVScroller",
"gridx/moles/ColumnResizer", "gridx/moles/Focus",
"gridx/moles/SingleSort", ...... dojo/domReady!" ], function(Gridx,
Cache, VirtualVScroller, ColumnResizer, Focus, SingleSort, ......){ ......
var grid = new Gridx({ cacheClass: Cache store: store,
structure: structure, vScrollerLazy: true,// 模塊參數可作為 Gridx 參數傳遞
moles: [ VirtualVScroller, // 用法 1:直接列舉模塊構造函數
"gridx/moles/ColumnResizer", // 用法 2:模塊 MID {
// 用法 3:帶有 moleClass 的對象 moleClass: SingleSort,
initialOrder: { colId: 'column1', descending: true } },
{ // 用法 4: moleClass 也接受 MID moleClass:
"gridx/moles/Focus" } ] }); ...... });

[size=0.76em]從上面的例子可見,要使用一個模塊先要引入該模塊的文件,然後直接列舉在
moles 數組中即可。moles 數組中的模塊既可以是模塊構造函數本身,也可以是模塊的 MID,還可以是一個含有 moleClass
屬性的對象。模塊本身也可能有參數,這些參數既可以與 moleClass 一起放在一個對象里(如 initialOrder),也可以直接作為 Gridx
的參數,只不過需要加上所屬模塊的名稱作為前綴(如 vScrollerLazy,這里 vScroller 是模塊名稱,lazy
是屬性名,加上前綴後首字母大寫)。模塊參數直接作為 Gridx 參數可以使代碼更為簡潔,因此是推薦的配置方法。

[size=0.76em]上面的例子中加入了 4 個模塊:VirtualVScroller
實現了延遲渲染的功能,每次只渲染出需要顯示的行,從而可以很快地完成擁有大量數據的 Grid 的創建;ColumnResizer
實現了滑鼠拖動改變列寬的功能;SingleSort 是一個單列排序的簡單實現;Focus 模塊則是對鍵盤的支持,這是一個被許多其他模塊引用的模塊,對於 A11y
非常重要。

[size=0.76em]熟悉 DataGrid 的用戶會發現這些功能在 DataGrid
中都是默認自帶的。雖然這些功能很常用,但用戶在不需要它們的時候卻難以屏蔽;即使能夠屏蔽它們的功能,大量的有關這些功能的代碼也依舊存在,而這不失為一種浪費。

[size=0.76em]圖 5. 啟用了排序、分頁、改變列寬、行選擇、行首勾選框等多個模塊的
Gridx

[size=0.76em]Gridx 的模塊化是其最大的特點之一。其實 Gridx
的所有用戶界面(包括表頭、數據行、縱向滾動條、橫向滾動條等)都是模塊,只不過這些模塊是默認載入的核心模塊而已。所謂創建 Gridx
其實就是在一個很小的邏輯內核(稱為 Core)的基礎上依次創建這些模塊。模塊之間秉承低耦合的原則,只以 API
和功能相聯系而不涉及具體實現,因此幾乎所有的模塊都是可替換的。同時模塊本身是高內聚的,使得維護和調試也更為方便。

[size=0.76em]其他配置參數

[size=0.76em]Gridx 本身還有少數幾個參數:如 autoHeight 和
autoWidth,可以由行高和列寬來決定 Gridx 的高度和大小;使用 cache/Async 時的 cacheSize
參數可以配置保存在客戶端的最大行數,而 pageSize 可是每次向 store 請求數據時的推薦請求行數。這些參數只有在特殊需求下才有必要使用,具體用法可關注
Gridx 文檔。

[size=0.76em]創建 Gridx 時還有一個基本要求就是要指定 Gridx
的大小。Gridx 與 DataGrid 不同,沒有默認高度(DataGrid 有 6em 的默認高度),因此必須通過 CSS 為 Gridx
指定高度(除非使用 autoHeight)。同樣,也沒有默認寬度。

[size=0.76em]目前 Gridx 只支持 Claro 主題,通過
gridx/resources/claro/Gridx.css 可以引入所有與 Gridx 相關的樣式。若要支持 RTL,還需要引入
gridx/resources/claro/Gridx_rtl.css。

[size=0.76em]圖 6. RTL 狀態下採用了 autoWidth 的
Gridx

[size=0.76em]回頁首

[size=0.76em]使用 Gridx
API

[size=0.76em]Gridx 本身的 API 很少,主要的 API
來源是其數據模型(grid.model)和各個模塊。

[size=0.76em]數據模型 API

[size=0.76em]Gridx 的數據模型(grid.model)是其 MVC 模式的
M 部分,是整個 Grid 的數據層和邏輯層,沒有任何用戶界面(甚至可以單獨使用)。grid.model 的 API 就是為了與 Gridx
的數據進行便捷的交互。主要 API 有:

[size=0.76em]清單 10. grid.model 的常用
API

grid.model.byIndex(rowIndex); grid.model.byId(rowId); grid.model.indexToId(rowIndex); grid.model.idToIndex(rowId); grid.model.size(); grid.model.when(request,
callback);

[size=0.76em]可見除了最後一個 when 函數,都是取數據的 API。這個
when 函數是數據模型中唯一的非同步函數,它可以接受一個回調函數作為參數,也會返回一個 Deferred 對象。其語義是:當所請求 request
的數據行都已載入到客戶端,且所有改變數據的操作都完成時,調用回調函數
callback。因此典型的用法是:

[size=0.76em]清單 11. grid.model.when
的用法

grid.model.when([1, 3, 5, 7, 9],
function(){ // 獲取第 5 行的 ID var rowId = grid.model.indexToId(5); // 獲取第
1 行的數據 var rowData = grid.model.byIndex(1).data; // 獲取第 9 行的 item var
storeItem = grid.model.byIndex(9).item; });

[size=0.76em]這里的 [1, 3, 5, 7, 9] 是用 index
的方式來請求行。Gridx 也支持通過范圍的方式來請求行:

grid.model.when({start: 0, count: 20}, ....);

[size=0.76em]或是用 ID
來請求行:

grid.model.when({id: ['row1', 'row2']}, ....);

[size=0.76em]更多用法請參見文檔。

[size=0.76em]grid.model 還有一些 API
可以對數據行的順序進行改變或者過濾,例如:

[size=0.76em]清單 12. 改變數據模型的 API

grid.model.sort(); grid.model.query(); grid.model.filter(); grid.model.move();

[size=0.76em]這些功能其實是由 model
的擴展(modelExtension)實現的。如果今後出現了其他類型的數據操作需求,就可以以這種擴展的形式進行補充。

[size=0.76em]注意到 Gridx
的數據模型沒有提供插入、刪除、修改數據的方法,這是因為這些操作都可以直接通過 store 的 API 來完成,Gridx
並不需要提供重復的介面。

[size=0.76em]模塊 API

[size=0.76em]模塊 API 是 Gridx 的另一大 API 來源。Gridx
的幾乎所有模塊都可以通過 Gridx 實例直接訪問到。例如:

[size=0.76em]清單 13. 訪問模塊 API

grid.sort.clear(); // 調用 sort 模塊的
clear 方法。 grid.columnResizer.setWidth(); // 調用 columnResizer 模塊的
setWidth 方法。 grid.select.row.getSelectedIds(); // 行選擇模塊的 getSelectedIds
方法 grid.select.column.selectById(); // 列選擇模塊的 selectById 方法 //
甚至核心模塊也不例外: grid.header.hidden =
true; grid.body.refresh(); grid.vScroller.scrollToRow();

[size=0.76em]由於每一個模塊都有自己的名字空間,因此不容易引發命名沖突。有的模塊(如行列選擇等)甚至可以創造出更深層次的命名空間,從而使
API 的命名更精簡。

[size=0.76em]Gridx 幾乎所有主要的功能 API
都由模塊提供,這其實簡化了各個 API 的命名。例如 selectRow 模塊和 selectColumn 模塊都可以有 selectById
函數,命名精簡的同時在使用的時候仍然具有清晰的語義。每個模塊具體的 API 請參考 Gridx 文檔。

[

2. 峰力的峰力聽力集團發展大事記

2005年
2005年10月控股收購巴西最大的助聽器批發和零售商CAS Protos Médicos公司。
2005年3月, Savia神鵰系列超級數字仿生助聽器在歐洲宇航局隆重推出,峰力聽力大使、Savia助聽器佩戴者、人類第一批第二個登月英雄巴茲奧爾德林(Buzz Aldrin)出席發布會。
Savia神鵰超級仿生助聽器榮獲2005年度全球優秀醫療器械設計金獎
峰力陸續推出miniValeo、microSavia、和eXtra 等新產品。
2004年
在中國,峰力聽力集團收購了峰力和優利康兩大品牌代理商,建立了直屬的營銷子公司,以加強在中國這個重要市場的市場開拓力度。
峰力聽力集團收購奧地利Viennatone Horgerate GmbH公司,歸入峰力在奧地利的Hansaton公司旗下。
峰力聽力集團推出了Valeo中高檔全數字助聽器系列新產品。
2003年
在中國增建了生產基地。
在日本設立了銷售公司。
Perseo和MAXX上市。Perseo成為峰力公司旗艦產品,MAXX是峰力公司推出的第一個中檔全數字助聽器。
2002年
2002年20月1日,Valentin Chapero Rueda接替 Peter Pfluger出任峰力聽力集團全球CEO。
2001年
2001年4月1日,峰力收購奧地利Hansaton Akustische Gerate GmbH公司。
與澳大利亞人工耳蝸公司科利耳關於FM的銷售協議。
2000年
Peter Pfluger 接替Andreas Rihs出任CEO一職,Andreas Rihs繼續擔任董事局主席。
收購了當時排列世界第七位的加拿大優利康助聽器公司,新的峰力聽力集團躋身全球聽力行業3強之列。
1999年
推出革命性全數字助聽器Claro。
1997年
新的科技中心在Stafa建成。
峰力公司創始人之一、技術總監和生產總監Beda Diethelm脫離日常事物,由Peter Pfluger接任。
1996年
收購比利時Lapperre和挪威Stephensen公司。
1995年
帶AudioZoom音頻變焦技術的PiCS助聽器在全球推廣。
1994年
銷售首次突破1億瑞士法郎,1994年11月峰力公開上市約20%的股票
1992年
PiCS助聽器在全球的發布取得巨大成功。
在Murten創立峰力通訊公司,擴大FM無線通訊業務。
1989年
在美國設立銷售公司。
1987年
公司搬遷到Stafa新廠房(「峰力之家」)
1985年
成立Phonak Holding Ltd公司,作為峰力集團控股公司。
1980年
Ernst Rihs過世,股份由他的兩個兒子繼承,與Beda Diethelm持股相當。
1978年
在德國和法國設立了第一批海外銷售公司。
1965年
Ernst Rihs收購了該公司所有股份,Beda Diethelm和Andreas Rihs隨後加入,幾年以後Hans-Ueli Rihs加入,公司從此進入業務發展的新紀元。
1947年
由Franco-Belgian集團投資者投資成立AG für Elektroakustik公司,總部位於蘇黎世。

閱讀全文

與claro集團相關的資料

熱點內容
春生科技基金 瀏覽:819
沈陽新松股票代碼 瀏覽:29
天能鋰電投資理財是騙局嗎 瀏覽:96
渤海信託電話 瀏覽:210
工資貸款包裝犯罪嗎 瀏覽:95
人民幣的兌換哪個幣最高 瀏覽:304
再生銅投資 瀏覽:70
傳統外匯海星 瀏覽:897
期貨外匯公司 瀏覽:388
掌眾金額小額貸款 瀏覽:502
華天科技股票分析 瀏覽:746
海星股票 瀏覽:589
3900港元多少人民幣多少 瀏覽:714
幫貸寶貸款靠譜嗎 瀏覽:92
ADx融資 瀏覽:380
p2p理財圖片 瀏覽:939
國元證券基金託管 瀏覽:578
今日菜百黃金價格多少錢一克 瀏覽:29
速賣通外匯申報 瀏覽:89
人造肉概念股票基金 瀏覽:745