我正在通过 Mike Bostock 的等值线图(缓慢地)工作,并在写下每一点以确保我理解它。我特别难以理解一点。该示例在线:https : //bl.ocks.org/mbostock/4060606
在代码中的某一点,Bostock 有一系列颜色,并将它们的反向范围(如果输入到色标中会产生该颜色的最小值和最大值)添加到地图中。对于每个“d”(两种颜色的数组),他使用 color.invertExtent(d) 来获得最小值和最大值。在函数结束时,他将“d”值(现在是两个数字的数组,最小值和最大值)返回到映射。这个我明白。
g.selectAll("rect")
.data(color.range().map(function(d) {
d = color.invertExtent(d);
if (d[0] == null) d[0] = x.domain()[0];
if (d[1] == null) d[1] = x.domain()[1];
return d;
}))
Run Code Online (Sandbox Code Playgroud)
但是,他还包括两个我不明白的“if”块。为什么它们是必要的?为什么这个双色数组的 d[0] 或 d[1] 永远等于“null”?为什么他将它们分配给 x.domain[0](在本例中为 600)和 x.domain[1] 为 860。在什么情况下“null”甚至会成为结果?
我正在开发一个项目,在该项目中我将工具提示附加到 DOM。当我将鼠标悬停在一个对象上时,工具提示会逐渐消失。当我离开时,工具提示淡出。
我遇到的问题是,它仍然在其他元素之上,因此阻止了它们的鼠标悬停事件触发。通常,我只会删除元素:d3.select("#theElement").transition().style("opacity",0).remove()
问题是,我希望能够稍后在鼠标悬停时重新附加它。有没有办法暂时将工具提示添加到它不会妨碍的地方?也许在 DOM 中或其他什么?大多数人在 D3 中是如何处理这个问题的?
我的 Puppeteer 脚本在无头模式下运行并且超时。
我不确定到底出了什么问题。该脚本在本地运行良好,但是当我在无头模式下运行时,它总是超时。
我在网上阅读过,这可能是由于脚本无法加载外部 javascript 源?有没有其他人遇到过这个问题,并能够提供帮助?
这是我的 Puppeteer 实例的设置函数:
setUpPuppeteer: async () => {
const headless = process.env.NODE_ENV === "production";
const browser = await pupeteer.launch({
headless,
devtools: true,
args: ['--no-sandbox' ]
});
const context = await browser.createIncognitoBrowserContext();
const page = await context.newPage(); // Create new instance of puppet
page.on('error', err => {
logger.error('Puppeteer error.', err);
});
page.setDefaultNavigationTimeout(10000);
if (process.env.NODE_ENV === 'production') {
await page.setRequestInterception(true); // Optimize (no stylesheets, images)...
page.on('request', request => {
if (['image', 'stylesheet'].includes(request.resourceType())) {
request.abort();
} …Run Code Online (Sandbox Code Playgroud) 我正在使用 Type-GraphQl (这是一个 Typescript 库,可让您使用 Typescript 类自动生成 GraphQL 架构和解析器)和 Typegoose (它对 Mongoose 查询执行相同的操作)。我正在尝试减少定义数据的文件数量,理想情况下这样我就只能获得 GQL 和 MongoDB 中数据的一个真实来源。
是否可以将这两个库组合起来,以便我使用单个 Typescript 类在一个文件中描述我的 GQL 架构和 Mongoose 类型?
例如,一个简单的 type-graphql 文件(定义“book”类型)如下所示:
import { Field, ObjectType } from "type-graphql";
import { InStock } from "./gql/shared/types";
@ObjectType()
export class Book extends InStock {
@Field()
title: string;
@Field()
publicationDate: Date;
@Field()
author: string;
@Field()
pages: number;
}
Run Code Online (Sandbox Code Playgroud)
该类typegoose看起来非常相似,但使用@prop装饰器来设置模式的属性:
import * as mongoose from "mongoose";
import { getModelForClass, prop } from "@typegoose/typegoose";
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Neovim 的当前设置(使用 Vim Plug)切换到 Packer,但遇到了麻烦。
我的 Neovim 是从~/.config/nvim/init.lua我的所有插件和其他设置的来源加载的。它们主要位于~/lua我的配置的文件夹(“主导入”)部分中,包括plug-plugins.lua引用所有插件的实际文件。
-- Main Imports
require("settings")
require("colors")
require("mappings")
require("functions")
require("autocommands")
require("plug-plugins")
...
Run Code Online (Sandbox Code Playgroud)
稍后在同一个init.lua文件中,我为所有这些插件获取插件特定设置。为了让我的目录当前正常工作,我正在安装所有内容并且:PlugInstall工作正常。
...
-- Plugin-specific settings
require("plugin-settings/fzf")
require("plugin-settings/fugitive")
require("plugin-settings/ultisnips")
require("plugin-settings/coc")
require("plugin-settings/treesitter")
require("plugin-settings/miscellaneous")
require("plugin-settings/toggle-terminal")
Run Code Online (Sandbox Code Playgroud)
Packer 的安装步骤非常稀疏,只是声明您应该将存储库克隆到“packpath”中的某个位置,但我不太清楚这意味着什么。当我进入 Neovim 时,按下:set packpath?我会得到以下路径:
packpath=~/.config/nvim,/etc/xdg/nvim,~/.local/share/nvim/site,/usr/local/share/nvim/site,/usr/share/nvim/site,/usr/local/Cellar/neovim/HEAD-b74916c_1/share/nvim/runtime,/usr/local/Cel
lar/neovim/HEAD-b74916c_1/lib/nvim,/usr/share/nvim/site/after,/usr/local/share/nvim/site/after,~/.local/share/nvim/site/after,/etc/xdg/nvim/after,~/.config/nvim/after
Run Code Online (Sandbox Code Playgroud)
这让我认为我可以将存储库克隆到~/.config/nvim列出的第一个路径。我不太确定下一步该做什么,或者这是否正确。
有人可以帮忙吗?安装 Packer 的基本步骤是什么(我使用的是 MacOS 11.6)。
我有一个handleSubmit函数可以从后端获取数据作为更大组件的一部分。当后端出现故障时,我想将错误信息发送到我的 redux 存储和/或本地组件,但我无法这样做。
该handleSubmit函数看起来像这样(它使用了正确连接的 React 钩子。如果有用,可以发布完整的组件):
const handleSubmit = async (e, { dataSource, filter, filterTarget }) => {
e.preventDefault();
setIsLoading(true);
setErrorValue(null);
setError(false);
const token = localStorage.JWT_TOKEN;
const link = filterTarget === "Identifier" ? `http://localhost:8081/api/${dataSource}/${filter}`: `http://localhost:8081/api/${dataSource}?filter=${filter}&filterTarget=${filterTarget}`;
try {
let data = await axios.get(link, { headers: { authorization: token }});
props.setData(data);
setError(false);
setIsLoading(false);
} catch (err){
setErrorValue(err.message);
setError(true);
setIsLoading(false);
};
};
Run Code Online (Sandbox Code Playgroud)
我故意通过表单提出错误的请求,这将在我的后端触发错误。这些是通过我的自定义 Express 中间件函数处理的,它看起来像这样(一旦我让这个框架工作,我会添加更多):
handleOtherError: (error, req, res, next) => { // Final custom error handler, with no …Run Code Online (Sandbox Code Playgroud) 我这里有一条简单的逻辑链,其中bigCities是一个Javascript Map。在此示例中,d表示从csv文件读取的数据数组中的每个对象。对于每个对象的城市属性,我将其分配为d.pop值(城市人口)。
bigCities.set(d.city, +d.pop)
如果我希望能够一次设置多个值怎么办?代码看起来像这样:
bigCities.set(d.city, ["population": +d.pop, "latitude": +d.lat, "longtitude": +d.lng)
Run Code Online (Sandbox Code Playgroud)
是否可以在Javascript映射中创建键值对,其中值是数据数组?如果是这样,我将如何正确编写上面的示例?
我使用文本编辑器 Sublime Text 3 来编辑代码,而且我经常会用双引号包裹一个字符串文字,我想将其更改为单引号,反之亦然。现在我滚动到每个引号,并将其替换为我想要的。是否有更快的工作流程?比如说,突出显示单词或热键或其他什么?我会发现它非常有用。
我正在调度一个看起来像这样的动作:
{ type: "TOGGLE_FARA", fara: true, id: "5d20d019cf42731c8f706db1" }
Run Code Online (Sandbox Code Playgroud)
“ id”仅用于识别正确的用户。该操作旨在修改我的“ fara”状态的“ enabled”属性。我的商店的fara部分如下所示:
{
fara: {
enabled: false, // This need to be flipped...
names: []
},
senators: {
enabled: false,
names: []
},
senateCandidates: {
enabled: false,
names: []
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不确定如何构造减速器。我只想更改“已启用”属性。我尝试了几种不同的方法:
export default (state = DEFAULT_STATE, action) => {
switch (action.type) {
case "INITIALIZE_SETTINGS":
return {
fara: action.fara,
senators: action.senators,
senateCandidates: action.senateCandidates,
emails: action.emails
}
case "TOGGLE_FARA":
return {
...state,
// fara['enabled']: action.fara <–– This won't compile...
// …Run Code Online (Sandbox Code Playgroud) 我有以下 Perl 单行:
perl -MLingua::EN::Sentence=get_sentences -ne 'print "$_\n" for grep { /replace_me/i } @{get_sentences($_)}' "${filePath}"
Run Code Online (Sandbox Code Playgroud)
我如何重构它,以便我能够用可以作为参数传递到脚本中的任何文本字符串(也称为变量)替换“replace_me”部分?
我知道您不能在单引号内添加变量,但我目前不确定如何使用双引号重新构造它。任何帮助,将不胜感激。
我正在尝试配置我的 Kubernetes 应用程序,以便我的前端应用程序可以与我的后端通信,该后端在另一个部署上运行并通过 ClusterIP 服务公开。
目前,前端应用程序通过 Nginx 提供一些静态内容。该服务器的配置位于已安装的配置内。我已经获得了/向用户提供静态内容的路由,并且我想在服务器块中配置另一个路由以指向我的后端,但/api我不确定如何将其定向到我的 ClusterIP 服务其他部署。
完整的前端部署文件如下所示:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
data:
nginx.conf: |
## To make changes to the configuration
## You use the kubectl rollout restart nginx command.
events {}
http {
include /etc/nginx/mime.types;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/extra-conf.d/*.conf;
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
}
#location /api {
##
## Send traffic to my API, running …Run Code Online (Sandbox Code Playgroud) javascript ×6
d3.js ×2
ecmascript-6 ×2
reactjs ×2
arrays ×1
css ×1
express ×1
kubernetes ×1
lua ×1
middleware ×1
mongodb ×1
mongoose ×1
mouseevent ×1
neovim ×1
packer ×1
perl ×1
puppeteer ×1
redux ×1
replace ×1
scripting ×1
state ×1
sublimetext3 ×1
timeout ×1
tooltip ×1
typegoose ×1
typegraphql ×1
typescript ×1
variables ×1
workflow ×1