
更新:使用Handsontable 11.0.1,它修復(fù)了11.0.0中發(fā)現(xiàn)的Angular UMD包中的一個(gè)退步。
我們剛剛發(fā)布了Handsontable 11.0.0.這個(gè)版本為框架包裝器增加了模塊化功能,改進(jìn)了monorepo結(jié)構(gòu),增加了一個(gè)新的locale選項(xiàng),等等。
模塊化是一種很好的方式,可以專注于對(duì)你重要的功能,定制你的網(wǎng)格,并減少你的應(yīng)用程序的大小。
自從Handsontable 8.3.0以來(lái),你已經(jīng)能夠在Handsontable的vanilla JavaScript版本中使用模塊?,F(xiàn)在,你也可以在Handsontable的每個(gè)框架版本(React、Angular和Vue)中使用模塊。
雖然這對(duì)我們所有的React、Angular和Vue用戶來(lái)說(shuō)是個(gè)好消息,但這也是一個(gè)突破性的變化,因?yàn)槟悻F(xiàn)在需要導(dǎo)入你想要使用的每個(gè)模塊。例如,要導(dǎo)入U(xiǎn)ndoRedo插件的模塊:
// import the `handsontable/base` module
import Handsontable from 'handsontable/base';
// import the `UndoRedo` module and the `registerPlugin()` function
import {
registerPlugin,
UndoRedo,
} from 'handsontable/plugins';
// register the `UndoRedo` module
registerPlugin(UndoRedo);
對(duì)模塊化不感興趣?不要害怕:我們還引入了新的方法,讓你一次性導(dǎo)入和注冊(cè)一個(gè)特定類別的所有模塊。
要了解更多關(guān)于Handsontable的模塊,請(qǐng)看我們的文檔。
要了解如何在你的框架中使用模塊,請(qǐng)看其中的一個(gè)指南:
自從我們?cè)贖andsontable 8.3.0中引入模塊化后,我們想讓每個(gè)模塊都能完全支持TypeScript。
為了實(shí)現(xiàn)這一目標(biāo),我們決定刪除龐大的、涵蓋所有TypeScript定義的文件(以前位于根目錄:./handsontable.d.ts)。取而代之的是,我們用一組整齊的小文件(現(xiàn)在位于一個(gè)新的目錄:./handsontable/types)取代它,專門用于Handsontable的各個(gè)部分。
因此,我們仔細(xì)檢查并修改了幾乎所有的Handsontable的類型定義。為什么這很重要?有幾個(gè)原因:
從TypeScript用戶的角度來(lái)看,如果你導(dǎo)入整個(gè)Handsontable庫(kù),一切都會(huì)保持不變。所有的類型定義都在導(dǎo)入Handsontable包時(shí)被加載。
import Handsontable from 'handsontable';
新的事情是,現(xiàn)在,當(dāng)你導(dǎo)入個(gè)別模塊時(shí),類型定義也會(huì)自動(dòng)加載,例如:
import Handsontable from 'handsontable/base';
import { registerPlugin, HiddenRows } from 'handsontable/plugins';
const hiddenRows = Handsontable.plugins.HiddenRows;
在 Handsontable 8.3.2 中,我們將所有 Handsontable 版本(JavaScript、Angular、React 和 Vue)放在一個(gè)單一的單一存儲(chǔ)庫(kù)中。
現(xiàn)在,為了更輕松地管理 monorepo,并為 Snyk 或 npm-audit 等第三方工具添加更好的支持,我們將 Handsontable 的主要 JavaScript 包放置在其自己的專用工作區(qū)中。 我們將它從根目錄移動(dòng)到一個(gè)新的子目錄:./handsontable,將它放置在與框架包裝器相同的級(jí)別:
|
前: |
后: |

關(guān)于構(gòu)建如果您計(jì)劃為 Handsontable 的存儲(chǔ)庫(kù)做出貢獻(xiàn),或者您在本地構(gòu)建自己的 Handsontable 版本,則此更改可能會(huì)影響您。 除此之外,它不應(yīng)以任何方式影響您的應(yīng)用程序。
了解 Handsontable 的構(gòu)建過(guò)程概覽。
Handsontable 存儲(chǔ)庫(kù) (打開(kāi)新窗口)是一個(gè) monorepo (打開(kāi)新窗口),其中包含以下項(xiàng)目:
|
項(xiàng)目 |
位置 |
描述 |
|
handsontable |
./handsontable |
Main Handsontable project |
|
@handsontable/angular |
./wrappers/angular |
Angular wrapper |
|
@handsontable/react |
./wrappers/react |
React wrapper |
|
@handsontable/vue |
./wrappers/vue |
Vue 2 wrapper |
所有項(xiàng)目都在同一版本號(hào)下一起發(fā)布。 但是每個(gè)項(xiàng)目都有自己的構(gòu)建和測(cè)試流程。
構(gòu)建過(guò)程將位于 ./handsontable/src/ 目錄中的源文件轉(zhuǎn)換為以下輸出文件:
不要修改上面提到的輸出文件。 相反,在 ./handsontable/src/ 目錄中進(jìn)行更改,然后運(yùn)行選定的構(gòu)建。 如果您想通過(guò)拉取請(qǐng)求將更改貢獻(xiàn)回 Handsontable,這一點(diǎn)尤其重要。
Handsontable 構(gòu)建過(guò)程需要:
每個(gè) Handsontable 項(xiàng)目都有自己的構(gòu)建過(guò)程,定義在自己的 package.json 文件中。 除此之外,根目錄也有自己的 package.json 文件:
|
文件 |
保持構(gòu)建任務(wù): |
|
./package.json |
- 一次所有包 |
|
./handsontable/package.json |
JavaScript包 |
|
./wrappers/angular/package.json |
Angular包 |
|
./wrappers/react/package.json |
React包 |
|
./wrappers/vue/package.json |
Vue包 |
要運(yùn)行您的第一個(gè)構(gòu)建:
您可以一次構(gòu)建所有包,也可以單獨(dú)構(gòu)建每個(gè)包。
要一次構(gòu)建所有包:
該腳本構(gòu)建以下包:
要構(gòu)建 JavaScript 包:
從根目錄構(gòu)建 JavaScript 包:
在 ./handsontable 目錄中,您還可以運(yùn)行單獨(dú)的 JavaScript 構(gòu)建任務(wù):
JavaScript 構(gòu)建任務(wù)
要構(gòu)建 Angular 包:
從根目錄構(gòu)建 Angular 包:
從 ./wrappers/angular 目錄,您還可以運(yùn)行單獨(dú)的 Angular 構(gòu)建任務(wù):
Angular構(gòu)建任務(wù)
要構(gòu)建 React 包:
從根目錄構(gòu)建 React 包:
從 ./wrappers/react 目錄,您還可以運(yùn)行單獨(dú)的 React 構(gòu)建任務(wù):
React構(gòu)建任務(wù)
要構(gòu)建 Vue 包:
從根目錄構(gòu)建 Vue 包:
當(dāng) populateFromArray() 方法的方法參數(shù)設(shè)置為 shift_down 或 shift_right 時(shí),它的工作方式現(xiàn)在有所不同。
之前,當(dāng)設(shè)置為 shift_down 或 shift_right 時(shí),populateFromArray() 為每行執(zhí)行單獨(dú)的 spliceRow 操作,或?yàn)槊苛袌?zhí)行單獨(dú)的 spliceColumn 操作。
現(xiàn)在,當(dāng)設(shè)置為 shift_down 或 shift_right 時(shí),populateFromArray() 會(huì)用一個(gè)大型操作填充行(或列)。 性能上的差異確實(shí)令人印象深刻:
如果您使用由每個(gè) spliceRow 和 spliceColumn 操作觸發(fā)的 beforeChange 和 afterChange 掛鉤,則需要適應(yīng)這些變化。
為了正確處理基于本地的數(shù)據(jù),我們給了Handsontable一個(gè)新的配置選項(xiàng),叫做locale。默認(rèn)情況下,它被設(shè)置為en-US。
到目前為止,我們只使用locale來(lái)確保正確過(guò)濾土耳其語(yǔ)的自定義搜索輸入,但我們計(jì)劃在未來(lái)擴(kuò)大其使用范圍,以進(jìn)一步定制功能,如過(guò)濾、搜索或比較不同的基于本地的數(shù)據(jù)集。這是改進(jìn)Handsontable內(nèi)置國(guó)際化功能的一個(gè)很好的起點(diǎn)。
你可以為整個(gè)網(wǎng)格設(shè)置地域選項(xiàng):
const hot = new Handsontable(container, {
// set the entire grid's locale to Turkish
locale: 'tr-TR',
});
但是您也可以為單個(gè)列設(shè)置它:
const hot = new Handsontable(container, {
columns: [
{
// set the first column's locale to Polish
locale: 'pl-PL',
},
{
// set the second column's locale to German
locale: 'de-DE',
},
{
// set the third column's locale to Japanese
locale: 'ja-JP',
},
],
});
要了解更多信息,請(qǐng)參閱 Handsontable 文檔。
正如所承諾的,我們會(huì)不斷改進(jìn) Handsontable 的文檔。 自上一個(gè) Handsontable 版本以來(lái),我們對(duì) API 參考的選項(xiàng)部分進(jìn)行了徹底檢查,重寫了一些指南(例如構(gòu)建),重新構(gòu)建了一些其他指南(例如模塊),添加了全新的指南(例如 React 模塊),添加了一些新的部分 現(xiàn)有指南(例如語(yǔ)言環(huán)境設(shè)置)等。
由于我們引入了一些向后不兼容的更改,因此我們準(zhǔn)備了一份遷移指南,引導(dǎo)您逐步從 Handsontable 10 升級(jí)到 Handsontable 11。
從 Handsontable 11.0.0 開(kāi)始,React 包裝器、Angular 包裝器和 Vue 包裝器支持模塊化。
如果您不使用任何包裝器,則無(wú)需更改任何內(nèi)容。
要繼續(xù)將所有 Handsontable 模塊與您的包裝器一起使用,請(qǐng)使用新的 registerAllModules() 方法注冊(cè)所有模塊。
在應(yīng)用程序的入口點(diǎn)文件中,添加以下代碼:
// import the registerAllModules() methodimport { registerAllModules } from 'handsontable/registry';
// register all Handsontable modulesregisterAllModules();
要開(kāi)始在您的包裝器中使用單個(gè) Handsontable 模塊,請(qǐng)參閱以下指南:
以前,Handsontable 的所有 TypeScript 定義都保存在一個(gè)大文件中,放在根目錄中:./handsontable.d.ts。
現(xiàn)在,每個(gè)模塊都有自己的 TypeScript 定義文件。 它們都保存在一個(gè)新的類型目錄中:./handsontable/types (打開(kāi)新窗口)。
有關(guān)更多詳細(xì)信息,請(qǐng)參閱此拉取請(qǐng)求 (打開(kāi)新窗口)。
當(dāng) populateFromArray() 方法的方法參數(shù)設(shè)置為 shift_down 或 shift_right 時(shí),它的工作方式現(xiàn)在有所不同。
new Handsontable(element, {
afterChange: (changes, source) => {
if (source === 'spliceRow' || source === 'spliceCol') {
handleChange(changes[0]);
}
}});
new Handsontable(element, {
afterChange: (changes, source) => {
if (source === 'populateFromArray') {
changes.forEach(change => handleChange(change))
}
}});
京ICP備09015132號(hào)-996 | 違法和不良信息舉報(bào)電話:4006561155
© Copyright 2000-2026 北京哲想軟件有限公司版權(quán)所有 | 地址:北京市海淀區(qū)西三環(huán)北路50號(hào)豪柏大廈C2座11層1105室
北京哲想軟件集團(tuán)旗下網(wǎng)站:哲想軟件 | 哲想動(dòng)畫