2017-05-06 61 views
1

我正在嘗試使所見即所得編輯器可以對所選文本進行註釋。如何在slatejs中生成自定義密鑰?

首先,我使用Draft.js。但是,它不適合用鍵指示帶註釋的文本,因爲Draft.js的實體鍵是在重複選擇時啓動的。

所以,我找到了slatejs,而我搜索了其他圖書館相關的這個東西。

slatejs有'setKeyGenerator'utils。但是,我找不到關於slatejs的'setKeyGenerator'的任何信息。這個util只是像下面這樣的設置功能。

function setKeyGenerator(func) { 
    generate = func; 
} 

而我不知道如何使用此功能生成密鑰。

然後,任何人都知道如何使用此功能或有任何想法註釋選定的文本?

+0

您可以通過https://www.npmjs.com/package/uuid – lux

+0

傳遞類似'uuidV4'的東西,但是我沒有找到一些關鍵生成器... – OH3VCI

回答

1

如果你想生成一個關鍵元素基準(數據塊),這裏是你可以做什麼:

// A key to reference to block by (you should make it more unique than `Math.random()`) 
var uniqueKey = Math.random(); 

// Insert a block with a unique key 
var newState = this.state 
    .transform() 
    .insertBlock({ 
     type: 'some-block-type', 
     data: { 
      uniqueKey: uniqueKey 
     }, 
    }) 
    .apply(); 

// Get the block's unique Slate key (used internally) 
var blockKey; 
var { document } = self.state; 
document.nodes.some(function(node) { 
    if (node.data.get('uniqueKey') == uniqueKey) { 
     blockKey = node.key; 
    } 
}); 

// Update data on the block, using it's key to find it. 
newState = newState 
    .transform() 
    .setNodeByKey(blockKey, { 
     data: { 
      // Define any data parameters you want attached to the block. 
      someNewKey: 'some new value!' 
     }, 
    }) 
    .apply(); 

這將允許您設置插入塊上的唯一密鑰,然後獲取塊的實際SlateJs key並用它更新塊。

+0

謝謝,Sneaksta!但是,我解決了這個問題,因爲它使自己的密鑰生成器util。 – OH3VCI