複製貼上系統由三個項目組成:ICopyable
物件、代表複製物件的 ICopyData
,以及可將複製資料移回可複製物件的 IPaster
物件。每種 ICopyable
都需要相關聯的 IPaster
,才能貼上該資料。
在極少數的情況下,您可能會想要實作自訂可複製或自訂自訂標記 (例如多選取外掛程式或跨分頁複製貼上外掛程式),因為通常會顯示可複製的物件,因此您無法將新的轉譯物件新增到 Blockly。工作區內唯一能存在的算繪物件是區塊、對話框和工作區註解。
導入可複製的元素
如要建立可複製的物件,您必須實作 ICopyable
介面。
可選取
ICopyable
介面會擴充 ISelectable
介面,因此您也必須實作這些方法和屬性。
由於鍵盤快速鍵會查看所選物件,藉此判斷要複製的內容,因此必須選取「可選取」。
class MyCopyable implements ISelectable {
constructor(workspace) {
this.id = Blockly.utils.idGenerator.genUid();
this.workspace = workspace;
}
select() {
// Visually indicate this draggable is selected.
}
unselect() {
// Visually indicate this draggable is not selected.
}
}
可複製
ICopyable
介面本身只有一個方法 toCopyData
,它會傳回可複製物件狀態的 JSON 序列化表示法,可用於重新建立可複製的物件。
複製資料也必須包含 paster
屬性,該屬性包含與貼上此複製資料相關的過去註冊字串名稱。如要進一步瞭解裝飾器,請參閱「實作中繼器」。
class MyCopyable implements ICopyable {
constructor(workspace, state) {
this.workspace = workspace;
this.myState = state;
}
toCopyData() {
return {
// This string matches the string used to register the paster.
paster: 'MY_PASTER',
state: this.myState,
};
}
}
實作過去函式
如要建立過去的函式,您必須實作 IPaster
介面。其中只有一個方法 paste
,它會擷取所貼上內容的複製資料、貼上項目的工作區,以及選用的座標 (也就是要貼上內容的位置)。
class MyPaster implements IPaster {
paste(copyData, workspace, coordinate) {
return new MyCopyable(workspace, copyData.state);
// Optionally position the copyable at the passed coordinate.
// Optionally select the copyable after it is pasted.
}
}
註冊
實作過去的標記後,您必須登錄這個器,才能從其 paster
屬性中找出與指定副本資料相關聯的作者。
// This string matches the string assigned to the 'paster' property.
Blockly.clipboard.registry.register('MY_PASTER', new MyPaster());