【问题标题】:Kendo diagram with Vue使用 Vue 的剑道图
【发布时间】:2019-07-02 10:54:15
【问题描述】:

我正在按照说明进行操作 https://www.telerik.com/kendo-vue-ui/components/diagram/ 但我正在运行一个带有 .vue 文件的独立 Vue 应用程序。

首先,它在 kendo.dataviz 失败,saing kendo 未定义(在 visualTemplate 函数中)。

我查看了 STACKBLITZ 中的代码,看起来示例代码是匆忙拼凑起来的。有点“让我们导入所有内容,不要太担心”。 index.js 中的导入也是如此。性能很重要,我不想在我的组件中导入超出我需要的东西。

https://stackblitz.com/edit/jhqgbd?file=index.js

那么,要让它在 Vue 中运行,我实际上需要什么?

import Vue from 'vue'
import '@progress/kendo-ui'
import '@progress/kendo-theme-default/dist/all.css'
import { DataSourceInstaller, DiagramInstaller } from '@progress/kendo-diagram-vue-wrapper'

Vue.use(DiagramInstaller);
Vue.use(DataSourceInstaller);

new Vue({
    el: '#vueapp',
    data: function() {
        return {
            diagramModel: {
                children: 'items'
            },
            diagramData: myData
        }
    },
    methods: {
        kendowidgetready: function (widget) {
            widget.bringIntoView(widget.shapes)
        },
        visualTemplate: function (options) {
            var dataviz = kendo.dataviz
            var g = new dataviz.diagram.Group()
            var dataItem = options.dataItem

            g.append(new dataviz.diagram.Rectangle({
                width: 210,
                height: 75,
                stroke: {
                    width: 0
                },
                fill: {
                    gradient: {
                    type: 'linear',
                    stops: [{
                        color: dataItem.colorScheme,
                        offset: 0,
                        opacity: 0.5
                    }, {
                        color: dataItem.colorScheme,
                        offset: 1,
                        opacity: 1
                    }]
                    }
                }
            }))

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.firstName + ' ' + dataItem.lastName,
                x: 85,
                y: 20,
                fill: '#fff'
            }))

            g.append(new dataviz.diagram.TextBlock({
                text: dataItem.title,
                x: 85,
                y: 40,
                fill: '#fff'
            }))

            g.append(new dataviz.diagram.Image({
                source: 'https://demos.telerik.com/kendo-ui/content/dataviz/diagram/people/' + dataItem.image,
                x: 3,
                y: 3,
                width: 68,
                height: 68
            }))

            return g
        }
    }
})

【问题讨论】:

    标签: vue.js kendo-ui kendo-dataviz


    【解决方案1】:

    我创建了一个工作示例here。我发现的唯一问题是,DataSourceInstaller 不存在于@progress/kendo-diagram-vue-wrapper 中。我必须从@progress/kendo-datasource-vue-wrapper 导入它。

    作为diagramData,我从link你的postet中获取了数据。

    作为index.html,我也从您的链接中获取了一个,但做了一些清理工作。

    完整示例

    index.js

    import Vue from 'vue';
    import '@progress/kendo-ui';
    import '@progress/kendo-theme-default/dist/all.css';
    import { DataSourceInstaller } from '@progress/kendo-datasource-vue-wrapper';
    import { DiagramInstaller } from '@progress/kendo-diagram-vue-wrapper';
    
    import diagramData from './data';
    
    Vue.use(DiagramInstaller);
    Vue.use(DataSourceInstaller);
    
    new Vue({
      el: '#vueapp',
      data() {
        return {
          diagramModel: {
            children: 'items',
          },
          diagramData,
        }
      },
      methods: {
        kendowidgetready(widget) {
          widget.bringIntoView(widget.shapes);
        },
        visualTemplate(options) {
          var dataviz = kendo.dataviz;
          var g = new dataviz.diagram.Group();
          var dataItem = options.dataItem;
    
          g.append(new dataviz.diagram.Rectangle({
            width: 210,
            height: 75,
            stroke: {
              width: 0,
            },
            fill: {
              gradient: {
                type: 'linear',
                stops: [{
                  color: dataItem.colorScheme,
                  offset: 0,
                  opacity: 0.5,
                }, {
                  color: dataItem.colorScheme,
                  offset: 1,
                  opacity: 1,
                }],
              },
            },
          }));
    
          g.append(new dataviz.diagram.TextBlock({
            text: dataItem.firstName + ' ' + dataItem.lastName,
            x: 85,
            y: 20,
            fill: '#fff',
          }));
    
          g.append(new dataviz.diagram.TextBlock({
            text: dataItem.title,
            x: 85,
            y: 40,
            fill: '#fff',
          }));
    
          g.append(new dataviz.diagram.Image({
            source: 'https://demos.telerik.com/kendo-ui/content/dataviz/diagram/people/' + dataItem.image,
            x: 3,
            y: 3,
            width: 68,
            height: 68,
          }));
    
          return g;
        },
      },
    });
    

    index.html

    <!DOCTYPE html>
    <html>
    
    <head>
    <title>Kendo UI for Vue Example Application</title>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
    </head>
    
    <body>
      <div id="vueapp">
        <kendo-hierarchicaldatasource 
          ref="remoteDataSourceComponent" 
          :data="diagramData" 
          schema-model-children="items">
        </kendo-hierarchicaldatasource>
    
        <kendo-diagram 
          data-source-ref="remoteDataSourceComponent" 
          layout-type="layered" 
          :shape-defaults-visual="visualTemplate"
          connection-defaults-stroke-color="#979797" 
          :connection-defaults-stroke-width="2" 
          @kendowidgetready="kendowidgetready">
        </kendo-diagram>
      </div>
    </body>
    
    </html>
    

    data.js

    export default [{
      firstName: 'Antonio',
      lastName: 'Moreno',
      image: 'antonio.jpg',
      title: 'Team Lead',
      colorScheme: '#1696d3',
      items: [{
        firstName: 'Elizabeth',
        image: 'elizabeth.jpg',
        lastName: 'Brown',
        title: 'Design Lead',
        colorScheme: '#ef6944',
        items: [{
          firstName: 'Ann',
          lastName: 'Devon',
          image: 'ann.jpg',
          title: 'UI Designer',
          colorScheme: '#ef6944'
        }]
      }, {
        firstName: 'Diego',
        lastName: 'Roel',
        image: 'diego.jpg',
        title: 'QA Engineer',
        colorScheme: '#ee587b',
        items: [{
          firstName: 'Fran',
          lastName: 'Wilson',
          image: 'fran.jpg',
          title: 'QA Intern',
          colorScheme: '#ee587b'
        }]
      }, {
        firstName: 'Felipe',
        lastName: 'Izquiedro',
        image: 'felipe.jpg',
        title: 'Senior Developer',
        colorScheme: '#75be16',
        items: [{
          firstName: 'Daniel',
          lastName: 'Tonini',
          image: 'daniel.jpg',
          title: 'Developer',
          colorScheme: '#75be16'
        }]
      }]
    }]
    

    【讨论】:

    • 这工作,根据剑道演示,但如果我有一个合适的 Vue 应用程序,它就不起作用。它仍然在dataviz = kendo.dataviz 失败,因为kendo 没有在任何地方定义。我创建了一个小仓库:github.com/igasparetto/kendo-flow
    • 我在您的仓库中创建了一个 PR,是否应该修复它。 kendo 被定义,因为它被添加到窗口 -> window.kendo。我猜这是在一些导入的包中完成的,可能是@progress/kendo-ui
    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 2018-12-14
    • 2018-12-12
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多