如何有条件地设置属性名称

2023-12-25

我试图根据数据中的一列动态设置属性名称,但它不起作用。

将路径箭头属性名称设置为marker-end or marker-start基于isReverse数据中的列。我创建了一个函数并在.attr()函数但它抛出脚本错误。

这个要求基本上是根据isReverse列值。并且从一根柱到目标柱的差异计算值也将反转。

function chkArrowDir(d){
    return d.isReverse == "false" ? 'marker-end' : 'marker-start';
}

bars.filter(d => d.Target != null)
  .append('path')
  .attr('d', (d, i) => pathBetweenBars(d, i))
  .style('stroke', 'gray')
  .style('fill', 'none')
  //.attr('marker-end', 'url(#arrowhead)')
  .attr(d => chkArrowDir(d), 'url(#arrowhead)')

下面是完整的代码:

var barData = [{
                "Time": "Bar1",
                "Value": 5388,
                "Target": 1,
                "isReverse": "true"
                },
                {
                "Time": "Bar2",
                "Value": 6453,
                "Target": 3,
                "isReverse": "false"
                },
                {
                "Time": "Bar3",
                "Value": 3345,
                "Target": -1,
                "isReverse": "false"
                },
                {
                "Time": "Bar4",
                "Value": 5345,
                "Target": 0,
                "isReverse": "false"
                }];

            const container = d3.select('#graph');
          const divWidth = parseInt(container.style('width'));
            const divHeight = parseInt(container.style('height'));

            const margin = {top: 30, right: 50, bottom: 50, left: 50};
          const width = divWidth - margin.left - margin.right;
          const height = divHeight - margin.top - margin.bottom;

                //To add svg in the visualization node i.e Dome node                    
         const svg = container.append("svg")
           .attr("width", divWidth)
           .attr("height", divHeight);
              
         const svgG = svg.append("g")
           .attr("transform", `translate(${margin.left},${margin.top})`);
           
           //To add tooltip for bar
           var tooltip = d3.select("body").append("div").attr("class", "toolTip");
          
          const defs = svg.append("defs");
          
          const marker = defs.append("marker")
          .attr("id","arrowhead")
          .attr("markerWidth","10")
           .attr("markerHeight","7")
           .attr("refX","0")
           .attr("refY","3.5")
           .attr("orient","auto")
           
           const polygon = marker.append("polygon")
           .attr("fill","gray")
           .attr("points","0 0, 10 3.5, 0 7")
                
        const xScale = d3.scaleBand()
          .domain(barData.map(d => d.Time))
          .range([0, width+margin.right]);

        const xAxis = d3.axisBottom(xScale);
                
        //Adding g attribute to svg for x axis
        svgG.append('g')
            .attr("transform", `translate(0,${height})`) 
            .call(xAxis);
                
        const yAxisMax = barData.reduce((max, item) => Math.max(max, item.Value), 0) * 1.5;
                
        const yScale = d3.scaleLinear()
            .domain([0, yAxisMax])
            .range([height, 0]);

        const yAxis = d3.axisLeft(yScale).ticks(4);
                
        svgG.append('g')
            .call(yAxis);

        const bars = svgG.selectAll('g.bar')
            .data(barData)
            .enter()
            .append('g')
          .classed('bar', true)
          .attr('transform', d => `translate(${xScale(d.Time) + xScale.bandwidth() / 2}, 0)`);
        /*  
        const staticColor =   "steelblue",
        highlightColor = "orange";

        var sheet = document.createElement('style')
        sheet.innerHTML = ".bar {fill: "+staticColor+"} .highlight {fill:"+highlightColor+"}";
        document.body.appendChild(sheet);
        */
        bars.append('rect')
            .attr('x', -20)
            .attr('width', 40)
            .attr('y', d =>  yScale(d.Value))
            .attr('height', d => height - yScale(d.Value) )
            .attr('fill', 'blue')
            .on("mousemove", onMouseOver)
                    .on("mouseout", onMouseOut);
                
        function onMouseOver(d,i)
        {
                    tooltip
                      .style("left", d3.event.pageX - 50 + "px")
                      .style("top", d3.event.pageY - 70 + "px")
                      .style("display", "inline-block")
                      .html("Year: " + (d.Time) + "<br>" + "Value: " + (d.Value));
                      d3.select(this).attr('fill', "#eec42d");
                      //d3.select(this).attr('class', 'highlight');
                      //this.setState({ fillColour: 'green' });


        }

        function onMouseOut(d,i)
        {
         tooltip.style("display", "none");
         d3.select(this).attr('fill', "blue");
        }
              
        bars.append('text')
            .text(d => d.Value)
            .attr('text-anchor', 'middle')
            .attr('y', d => yScale(d.Value))
          .attr('dy', -5)
         ;
         
const topPosition = i => yScale(9000) + i * 15;         
         
const pathBetweenBars = (d, i) => {
if(d.Target != -1)
{
    const delta = d.Target - i;
  const targetValue = barData[d.Target].Value;
  const targetX = delta * xScale.bandwidth() - 5;
  const sourceY = yScale(d.Value);
  const targetY = yScale(targetValue);
  const topY = topPosition(i);
  return `M 5,${sourceY - 20} V ${topY} H ${targetX} V ${targetY - 25}`;
}
else
return `M 5,${-100} V ${-100} H ${-1000} V ${-0}`;
};         

const LABEL_WIDTH = 50;

const midPosition = (d, i) => {
if(d.Target != -1)
{
    const delta = d.Target - i;
  return delta * xScale.bandwidth() / 2;
  }
  else
  {
   return -1000;
  }
}

function chkArrowDir(d)
{
    return d.isReverse == "false" ? 'marker-end' : 'marker-start';
}

bars.filter(d => d.Target != null)
  .append('path')
  .attr('d', (d, i) => pathBetweenBars(d, i))
  .style('stroke', 'gray')
  .style('fill', 'none')
  .attr(d => chkArrowDir(d), 'url(#arrowhead)')
    
bars.filter((d) => d.Target != null)
 .append('rect')
 .attr('x', (d, i) => midPosition(d, i) - LABEL_WIDTH / 2)
 .attr('y', (d, i) => topPosition(i) - 10)
 .attr('width', LABEL_WIDTH)
 .attr('height', 20)
 .attr('rx', 10)
 .style('fill', 'white')
 .style('stroke', 'gray');

bars.filter((d, i) => d.Target != null)
 .append('text')
 .text((d, i) => `${d.Target != -1 ? barData[d.Target].Value > d.Value ? '+' : '':""}${d.Target != -1 ? Math.round((barData[d.Target].Value / d.Value * 100) - 100):""}%`)
  .attr('x', (d, i) => midPosition(d, i))
  .attr('y', (d, i) => topPosition(i) + 3)
  .attr('text-anchor', 'middle')
  .style('fill', 'black');
#graph {
  width: 600px;
  height: 400px;
}

text {
  font-size: 12px;
  font-family: "Ubuntu";
}

.toolTip {
  position: absolute;
  display: none;
  min-width: 80px;
  height: auto;
  background: none repeat scroll 0 0 #ffffff;
  border: 1px solid #6F257F;
  padding: 5px;
  text-align: left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

<div id="graph">
</div>

在 D3 中,attr方法...

Selection.attr(名称[ 值])

...无法接收函数作为第一个参数,此处称为name。如果你看一下源代码 https://github.com/d3/d3-selection/blob/main/src/selection/attr.js,你会发现它必须是一个字符串。实际上,即使你传递另一个原语,例如数字,它也会是转换为字符串 https://github.com/d3/d3-selection/blob/91245ee124ec4dd491e498ecbdc9679d75332b49/src/namespace.js#L4 via:

var prefix = name += ""

一个可能的解决方案是使用null作为一个值。在内部,使用null将会通知element.removeAttribute(),因此实际上,您仅在值为非空时设置该属性。

因此,它将是:

.attr("marker-end", d => d.isReverse === "false" ? "url(#arrowhead)" : null)
.attr("marker-start", d => d.isReverse === "false" ? null : "url(#arrowhead)")

这是经过更改的代码:

var barData = [{
                "Time": "Bar1",
                "Value": 5388,
                "Target": 1,
                "isReverse": "true"
                },
                {
                "Time": "Bar2",
                "Value": 6453,
                "Target": 3,
                "isReverse": "false"
                },
                {
                "Time": "Bar3",
                "Value": 3345,
                "Target": -1,
                "isReverse": "false"
                },
                {
                "Time": "Bar4",
                "Value": 5345,
                "Target": 0,
                "isReverse": "false"
                }];

            const container = d3.select('#graph');
          const divWidth = parseInt(container.style('width'));
            const divHeight = parseInt(container.style('height'));

            const margin = {top: 30, right: 50, bottom: 50, left: 50};
          const width = divWidth - margin.left - margin.right;
          const height = divHeight - margin.top - margin.bottom;

                //To add svg in the visualization node i.e Dome node                    
         const svg = container.append("svg")
           .attr("width", divWidth)
           .attr("height", divHeight);
              
         const svgG = svg.append("g")
           .attr("transform", `translate(${margin.left},${margin.top})`);
           
           //To add tooltip for bar
           var tooltip = d3.select("body").append("div").attr("class", "toolTip");
          
          const defs = svg.append("defs");
          
          const marker = defs.append("marker")
          .attr("id","arrowhead")
          .attr("markerWidth","10")
           .attr("markerHeight","7")
           .attr("refX","0")
           .attr("refY","3.5")
           .attr("orient","auto")
           
           const polygon = marker.append("polygon")
           .attr("fill","gray")
           .attr("points","0 0, 10 3.5, 0 7")
                
        const xScale = d3.scaleBand()
          .domain(barData.map(d => d.Time))
          .range([0, width+margin.right]);

        const xAxis = d3.axisBottom(xScale);
                
        //Adding g attribute to svg for x axis
        svgG.append('g')
            .attr("transform", `translate(0,${height})`) 
            .call(xAxis);
                
        const yAxisMax = barData.reduce((max, item) => Math.max(max, item.Value), 0) * 1.5;
                
        const yScale = d3.scaleLinear()
            .domain([0, yAxisMax])
            .range([height, 0]);

        const yAxis = d3.axisLeft(yScale).ticks(4);
                
        svgG.append('g')
            .call(yAxis);

        const bars = svgG.selectAll('g.bar')
            .data(barData)
            .enter()
            .append('g')
          .classed('bar', true)
          .attr('transform', d => `translate(${xScale(d.Time) + xScale.bandwidth() / 2}, 0)`);
        /*  
        const staticColor =   "steelblue",
        highlightColor = "orange";

        var sheet = document.createElement('style')
        sheet.innerHTML = ".bar {fill: "+staticColor+"} .highlight {fill:"+highlightColor+"}";
        document.body.appendChild(sheet);
        */
        bars.append('rect')
            .attr('x', -20)
            .attr('width', 40)
            .attr('y', d =>  yScale(d.Value))
            .attr('height', d => height - yScale(d.Value) )
            .attr('fill', 'blue')
            .on("mousemove", onMouseOver)
                    .on("mouseout", onMouseOut);
                
        function onMouseOver(d,i)
        {
                    tooltip
                      .style("left", d3.event.pageX - 50 + "px")
                      .style("top", d3.event.pageY - 70 + "px")
                      .style("display", "inline-block")
                      .html("Year: " + (d.Time) + "<br>" + "Value: " + (d.Value));
                      d3.select(this).attr('fill', "#eec42d");
                      //d3.select(this).attr('class', 'highlight');
                      //this.setState({ fillColour: 'green' });


        }

        function onMouseOut(d,i)
        {
         tooltip.style("display", "none");
         d3.select(this).attr('fill', "blue");
        }
              
        bars.append('text')
            .text(d => d.Value)
            .attr('text-anchor', 'middle')
            .attr('y', d => yScale(d.Value))
          .attr('dy', -5)
         ;
         
const topPosition = i => yScale(9000) + i * 15;         
         
const pathBetweenBars = (d, i) => {
if(d.Target != -1)
{
    const delta = d.Target - i;
  const targetValue = barData[d.Target].Value;
  const targetX = delta * xScale.bandwidth() - 5;
  const sourceY = yScale(d.Value);
  const targetY = yScale(targetValue);
  const topY = topPosition(i);
  return `M 5,${sourceY - 20} V ${topY} H ${targetX} V ${targetY - 25}`;
}
else
return `M 5,${-100} V ${-100} H ${-1000} V ${-0}`;
};         

const LABEL_WIDTH = 50;

const midPosition = (d, i) => {
if(d.Target != -1)
{
    const delta = d.Target - i;
  return delta * xScale.bandwidth() / 2;
  }
  else
  {
   return -1000;
  }
}

function chkArrowDir(d)
{
    return d.isReverse == "false" ? 'marker-end' : 'marker-start';
}

bars.filter(d => d.Target != null)
  .append('path')
  .attr('d', (d, i) => pathBetweenBars(d, i))
  .style('stroke', 'gray')
  .style('fill', 'none')
  .attr("marker-end", d => d.isReverse === "false" ? "url(#arrowhead)" : null)
.attr("marker-start", d => d.isReverse === "false" ? null : "url(#arrowhead)")
    
bars.filter((d) => d.Target != null)
 .append('rect')
 .attr('x', (d, i) => midPosition(d, i) - LABEL_WIDTH / 2)
 .attr('y', (d, i) => topPosition(i) - 10)
 .attr('width', LABEL_WIDTH)
 .attr('height', 20)
 .attr('rx', 10)
 .style('fill', 'white')
 .style('stroke', 'gray');

bars.filter((d, i) => d.Target != null)
 .append('text')
 .text((d, i) => `${d.Target != -1 ? barData[d.Target].Value > d.Value ? '+' : '':""}${d.Target != -1 ? Math.round((barData[d.Target].Value / d.Value * 100) - 100):""}%`)
  .attr('x', (d, i) => midPosition(d, i))
  .attr('y', (d, i) => topPosition(i) + 3)
  .attr('text-anchor', 'middle')
  .style('fill', 'black');
#graph {
  width: 600px;
  height: 400px;
}

text {
  font-size: 12px;
  font-family: "Ubuntu";
}

.toolTip {
  position: absolute;
  display: none;
  min-width: 80px;
  height: auto;
  background: none repeat scroll 0 0 #ffffff;
  border: 1px solid #6F257F;
  padding: 5px;
  text-align: left;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

<div id="graph">
</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何有条件地设置属性名称 的相关文章

  • zone.js:140未捕获类型错误:无法读取属性“删除”

    我是 kendo ui 的新手 我在小提琴中开发了原型 删除确认窗口在那里工作正常 但是当我集成到我的代码库中时 我收到错误 Cannot read property remove at the line pai to delete rem
  • JavaScript 支持逐字字符串吗?

    在 C 中 您可以像这样使用逐字字符串 server share file txt JavaScript中有类似的东西吗 模板字符串支持换行 so you can do this if you want https developer mo
  • Flex、AngularJS + Masonry、akoenig/angular-deckgrid 等 [重复]

    这个问题在这里已经有答案了 我一直在发送此电子邮件 我即将发布一个用于 Web 应用程序安全的应用程序 它需要使用像 Masonry 这样的网格 我已经尝试过所有的 每一个角度模块 指令和不同的方法 包括基于 CSS 的技术 纯 Vanil
  • jQuery JSONP ajax,未设置身份验证标头

    我正在尝试使用以下设置向 google 联系人 API 发出 ajax 请求 ajax url https www opensocial googleusercontent com api people me all dataType js
  • JavaScript 画布内存问题

    我在用着getImageData putImageData在 HTML5 画布上能够操作图片 我的问题是浏览器似乎从来没有释放任何内存 http jonelf posterous com lite gc men for sent 直到我关闭
  • Typescript:匿名函数内可能未定义的变量

    太长了 在匿名函数中使用变量之前检查变量仍然 TS 警告变量可能未定义 在下面的代码示例中变量baseDirId检查是否未定义 然后传递给 array map 函数 但 TS 发出警告baseDirId可以是未定义的 Typescript
  • querySelector 搜索直接子级[重复]

    这个问题在这里已经有答案了 我有一些类似 jquery 的函数 function elem return gt someselector elem 问题是我怎样才能做同样的事情querySelector 问题是 gt 选择器中querySe
  • 如何正确地将节点从引用传递到上下文?

    我正在尝试将节点从引用传递到上下文 但是因为我在第一次渲染后没有重新渲染 所以传递的节 点是null 我考虑了两种变体 但我认为它们不是最好的 To pass ref代替ref current 但在用例中 我将被迫使用类似的东西contex
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 插件 gulp-babel 错误:插件/预设文件不允许导出对象,只能导出函数

    我现在尝试在我的 Ionic v1 应用程序中使用 JavaScript 2015 ES6 包 json name test version 1 0 0 dependencies ionic native deeplinks 4 18 0
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • 获取类中的所有静态 getter

    假设我有这个类 我像枚举一样使用它 class Color static get Red return 0 static get Black return 1 有没有类似的东西Object keys to get Red Black 我使用
  • 有序 JSON 对象

    我有一个 servlet 它与数据库通信 然后返回有序 按时间排序 对象的列表 在servlet部分 我有 access DB returns a list of User objects ordered ArrayList users M
  • 使用严格模式编译指示时如何声明全局变量

    使用自调用函数来包装严格模式兼容代码 通常称为严格模式编译指示 被认为是一种很好的做法 function use strict Strict code here 我的问题是在这种情况下如何声明全局变量 我今天知道的三种替代方案 替代方案 1
  • HTML5 地理定位 - 在 iOS 上无法始终工作

    目前正在使用 HTML5 地理定位 我已经在所有网络浏览器上测试了它 它似乎工作正常 然而 当我在 iPad 上测试地理定位时 它在 iPad mini 上始终有效 但当我将其放在更大的 iPad iPad 2 上时 位置似乎并不总是有效
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 如何消除 Windows.Forms 自定义控件滚动时的闪烁?

    我想用 C 创建一个自定义控件 但每次我必须完全重绘控件时 即使我使用双缓冲 首先绘制到图像 然后位图传输 它也会闪烁 当我必须完全重绘时如何消除闪烁 您可以尝试在 InitializeComponent 调用之后将以下内容放入构造函数中
  • 如何使用 Knex.js 从列中检索唯一值?

    I use Knex js http knexjs org 与 Postgres 数据库通信 我的表中有一些行 其中有一列名为 state 代表美国的一个州 如何从此列中检索所有唯一值 您可能正在寻找不同的节点 https knexjs o
  • 如何对推送通知进行分组

    我正在向我的 Android 手机发送推送通知 我希望对这些通知进行分组 这样我的通知列表就不会被淹没 根据文档 来自同一 源 的消息被分组 但在我的手机上 消息总是显示为未分组 我从 Google Apps 脚本调用推送 API 并尝试在
  • 从多个远程Windows服务器获取磁盘空间信息

    我正在尝试制作一种工具 可以登录多个远程 Windows 服务器并获取其驱动器详细信息并将其显示在一个窗口下 我希望在远程服务器中执行的可能命令是wmic logicaldisk get size freespace caption 我打算
  • matplotlib 文本未剪切

    绘制文本时matplotlib with text 然后交互平移图像 生成的绘制文本不会剪切到数据窗口 这与使用绘制数据或绘制文本的方式相反annotate 有效 并且没有直观意义text 使用数据窗口坐标 import matplotli
  • 当 CWD 更改时,如何在 Python 模块中使用相对路径?

    我有一个 Python 模块 它使用模块目录的子目录中的一些资源 在搜索堆栈溢出并找到相关答案后 我设法使用类似的方法将模块定向到资源 import os os path join os path dirname file fonts my
  • 将结构传递到接口字段中是否会分配?

    我有一个像这样的结构 struct MyStructure IFoo 和这样的方法 public BarThisFoo IFoo a 我的问题是将结构传递到该方法中是否会 装箱 结构 从而导致垃圾分配 附录 在有人说之前 垃圾收集在这个应用
  • TwinCAT3 基于 Jenkins 构建

    是否可以在 Jenkins 上构建 TwinCAT3 解决方案 我已经用 msbuild 和 devenv com 尝试过了 msbuild MSBuild 不支持 tspproj devenv com tspproj 找不到该项目类型所基
  • 导入错误:没有名为 的模块

    我正在尝试通过 Python 学习编程 所以如果这是一个简单得荒谬的问题 我提前道歉 我试图简化我复杂的目录结构并利用Python的一些代码重用功能 我遇到了对我来说莫名其妙的问题ImportError错误 在过去的几个小时里 我一直在阅读
  • 带参数的回调函数ReactJS

    使用 ReactJS 并难以理解如何使用callback functions使用 ReactJS 我有一个名为的父组件TodoFormComponent 它初始化我的待办事项列表 我已经创建了一个回调函数TodoItemsComonent
  • 跨 DLL 调用 CoInitialize/CoUninitialize 的合适位置是什么?

    我正在实现一个 DLL 其中包含共享 ADO 连接 https stackoverflow com questions 9434762 pass adoconnection from vba to delphi通过使用ConnectionO
  • 根据 GPS 坐标记录计算圈数

    我有一个包含大量点的 GPX 文件 按时间排序的经度和纬度 如何计算我的点集包含多少圈 GPS 在赛道比赛期间被记录 圈数是车辆通过赛道起点 终点的次数 假设轨道足够小 我们可以假设这些点位于一个平面上 例如 我们可以忽略地球的曲率 在这种
  • Scala 反序列化:找不到类

    我试图理解尝试序列化 反序列化一个非常简单的数据结构时发生的以下问题 case class SimpleClass i Int object SerializationDebug def main args Array String val
  • 如何减少 ScalaCheck 生成的测试用例数量?

    我正在尝试解决两个 ScalaCheck specs2 问题 有什么方法可以改变 ScalaCheck 生成的案例数量吗 如何生成包含一些 Unicode 字符的字符串 例如 我想生成大约 10 个包含字母数字和 Unicode 字符的随机
  • 为初学者建议使用 json 的 ASP.NET MVC 教程 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经开始学习 json 以在 asp net mvc 中开发高端 Web 应用程序 请建议一些教程或链接来理解它 以下内容应该会有所帮助
  • CGAL:2D 约束 Delaunay 三角剖分 - 将信息添加到约束

    在将点添加到三角器对象之前 可以将信息 如整数 附加到点上 我这样做是因为一方面我需要一个稍后使用的 int flag 来定义我的纹理坐标 另一方面我需要一个索引 以便我可以创建一个索引的 VBO http doc cgal org lat
  • 每次更改代码后都会出现 org.jboss.weld.exceptions.IllegalStateException: WELD-000227

    我正在使用 NetBeans 和 Glassfish 4 1 1 开发一个 Web 应用程序 我使用 JSF 和 CDI 来管理 Facelets 的支持 bean 由于在更改代码中的任何内容后不久 在通过浏览器 成功 部署和运行应用程序后
  • PhpStorm Xdebug:等待使用 ide key 的传入连接

    我正在运行 PHP 7 0 和 PhpStorm 2016 1 我安装了 x debug 这是我的配置 当从 PhpStorm 运行调试时 调试器选项卡显示以下错误消息 等待 ide 键 13136 的传入连接 ide 密钥每次都不同 请帮
  • MdSidenavLayout 内的粘性 MdToolbar

    我有一个 Angular 2 Material 应用程序 它使用
  • 如何有条件地设置属性名称

    我试图根据数据中的一列动态设置属性名称 但它不起作用 将路径箭头属性名称设置为marker end or marker start基于isReverse数据中的列 我创建了一个函数并在 attr 函数但它抛出脚本错误 这个要求基本上是根据i