【问题标题】:vis.js Network regeneratorRuntime is not defined [regeneratorRuntime is not defined] error in Salesforcevis.js Network regeneratorRuntime is not defined [regeneratorRuntime is not defined] Salesforce 中的错误
【发布时间】:2020-12-03 16:13:32
【问题描述】:

尝试在 Salesforce 中使用 vis.js 网络库我已经在 LWC 和 API 版本 40.0 的 Aura 组件中尝试过,但我收到了 regeneratorRuntime 未定义 [regeneratorRuntime 未定义] 尝试使用https://unpkg.com/browse/vis-network@8.1.0/standalone/umd/vis-network.min.js

【问题讨论】:

  • 拥有您的资源可能会有所帮助

标签: salesforce vis.js salesforce-lightning vis.js-network lwc


【解决方案1】:

这是我认为可以解决您的问题的方法。

第一种方法(仅当库小到可以作为 LWC 组件上传时)

你需要创建两个 LWC 组件:

  • 我的网络
    • myNetwork.js
    • myNetwork.html
    • myNetwork.js-meta.xml
  • visNetworkLib

import { LightningElement } from 'lwc'
import { DataSet, Network } from 'c/visNetworkLib'

export default class MyNetwork extends LightningElement {
  nodes = null
  edgeds = null

  renderedCallback () {
    this.nodes = new DataSet([
      {id: 1, label: 'Node 1'},
      {id: 2, label: 'Node 2'},
      {id: 3, label: 'Node 3'},
      {id: 4, label: 'Node 4'},
      {id: 5, label: 'Node 5'},
    ])

    this.edges = new DataSet([
      {from: 1, to: 3},
      {from: 1, to: 2},
      {from: 2, to: 4},
      {from: 2, to: 5},
      {from: 3, to: 3},
    ])

    const container = this.template.querySelector('div.myNetwork')
    
    this.network = new Network(container, {
      nodes: this.nodes,
      edges: this.edges,
    }, {})
  }
}
<template>
    <div 
        lwc:dom="manual" 
        class="myNetwork"
    ></div>
</template>

第二种方法

创建一个静态资源名称visNetwork,即上传的vis-network.min.js

然后像这样在 myNetwork.js 中加载它

import { LightningElement } from 'lwc'
import { ShowToastEvent } from 'lightning/platformShowToastEvent'
import visNetworkUrl from '@salesforce/resourceUrl/visNetwork'
import { loadScript } from 'lightning/platformResourceLoader'

export default class MyNetwork extends LightningElement {
    nodes = null
    edgeds = null

    visLoaded = false;

    renderedCallback() {
        if (!this.visLoaded) {
            this.visLoaded = true;

            loadScript(this, visNetworkUrl).then(() => {
                this.initializeNetwork();
            })
            .catch(error => {
                this.dispatchEvent(
                    new ShowToastEvent({
                        title: 'Error loading vis network',
                        message: error.message,
                        variant: 'error'
                    })
                );
            });
        }
    }

    initializeNetwork () {
        this.nodes = new DataSet([
            {id: 1, label: 'Node 1'},
            {id: 2, label: 'Node 2'},
            {id: 3, label: 'Node 3'},
            {id: 4, label: 'Node 4'},
            {id: 5, label: 'Node 5'},
        ])

        this.edges = new DataSet([
            {from: 1, to: 3},
            {from: 1, to: 2},
            {from: 2, to: 4},
            {from: 2, to: 5},
            {from: 3, to: 3},
        ])

        const container = this.template.querySelector('div.myNetwork')
        
        this.network = new Network(container, {
            nodes: this.nodes,
            edges: this.edges,
        }, {})
    }
}

【讨论】:

  • 当我尝试将 vis-network.min.js 保存为 LWC 包中的文件时,我收到此错误:Failed to save Lightning Component Resource [lwc/visNetworkLib/visNetworkLib.js] of Lightning Component Bundle [visNetworkLib]. Error: Value too long for field: Source maximum length is:131072 它似乎超出了 LWC JS 文件的最大长度。
  • 我在我的答案中添加了另一种方法,应该避免限制,它可能有错误,因为我没有时间测试它。它遵循文档:developer.salesforce.com/docs/component-library/documentation/…
【解决方案2】:

我想通了,你必须单独加载 vis-data 和 vis-network。你可以在这里找到基于 NPSP 关系和 NPSP Affiliations 的工作示例。 https://github.com/mrainboldt/visNetworkMapLWC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多