小编hel*_*on3的帖子

匹配AngularJS ui-router中的一个或另一个单词

使用AngularJS + ui-router,我需要将一个url与两个单词中的一个匹配:

/oneWord/.../secondWord...

路由和控制器几乎相同,所以我想避免重复代码.

但是,使用我习惯的正则表达式,在正则表达式应该起作用的地方不起作用:

url: '/{type:(oneWord|secondWord)}/:group',

但是,它会抛出一个错误:

Unbalanced capture group in route '/{type:(oneWord|secondWord)}/:group'

一个正则表达式应该工作,因为这工作正常:

url: "/{page:[0-9]{1,8}}"

我知道这(oneWord|secondWord)是一个有效的正则表达式,所以我错过了什么?

regex angularjs

7
推荐指数
1
解决办法
2410
查看次数

由函数外部数组定义的指令引起的Angular itkn错误

我正在使用Angular 1.3.15,也尝试过1.2.28,以及角度引导程序.昨晚,在将Chrome更新为v42.0.2311.90之后,我突然开始看到大量的角度itkn错误:

Error: [$injector:itkn] Incorrect injection token! Expected service name as string, got function ()
http://errors.angularjs.org/1.3.15/$injector/itkn?p0=function%20()
    at REGEX_STRING_REGEXP (angular.min.js?bust=undefined:63)
    at Object.invoke (angular.min.js?bust=undefined:4189)
    at angular.min.js?bust=undefined:6525
    at forEach (angular.min.js?bust=undefined:323)
    at Object.<anonymous> (angular.min.js?bust=undefined:6523)
    at Object.invoke (angular.min.js?bust=undefined:4204)
    at Object.enforcedReturnValue [as $get] (angular.min.js?bust=undefined:4056)
    at Object.invoke (angular.min.js?bust=undefined:4204)
    at angular.min.js?bust=undefined:4021
    at Object.getService [as get] (angular.min.js?bust=undefined:4162)
Run Code Online (Sandbox Code Playgroud)

这在更新Chrome之前没有发生,但我想我不能说这肯定是相关的.

经过深思熟虑后,我发现任何定义的指令都是这样的:

  .directive('modalTransclude', function () {
    return {
      // directive code
    };
  })
Run Code Online (Sandbox Code Playgroud)

会导致此itkn错误.我在控制台key中记录了$inject迭代器中的角度,它返回了指令本身的功能,而不仅仅是明确意图的字符串.

我发现将函数包装在一个数组中,即使没有定义注入的任何字符串,它也解决了这个问题:

  .directive('modalTransclude', [function () {
    return {
      // directive code
    };
  }]) …
Run Code Online (Sandbox Code Playgroud)

angularjs angular-bootstrap

7
推荐指数
1
解决办法
1622
查看次数

在forllint中执行分隔代码块的换行符

我一直在搜索Eslint规则文档,无法弄清楚如何在块之间强制执行换行符.

例如,在jscs中我可以拒绝这些因为没有分隔的新行:

if (!rows.length) {
  // code
}
var pagination;
if (something) {
  // code
}
Run Code Online (Sandbox Code Playgroud)

"space-before-blocks"听起来像是我想要的,但它只适用于空格而不是换行符.

javascript eslint

7
推荐指数
1
解决办法
268
查看次数

分支/主标签修订使用Git递增

我正在尝试确定一个良好的发布管理系统,并结合使用版本号标记的标记实践 - 例如,1.0.该标记之后的任何更改都会增加,如1.0-1,1.0-2等.

但是,如果我从master for 1.0版本创建一个新分支,然后切换到该分支并将其标记为1.0,则上述系统工作正常.该分支上的其他错误修复按预期显示,1.0-1,1.0-2

但是,除非我在制作1.0分支后第一次提交后重新标记主服务器,否则对主服务器的任何工作也将显示相同的增量:1.0-1,1.0-2

当然,sha1哈希将是唯一的,但我最终会从master和branch获得相同的修订/增量.

当我只标记分支时,有没有办法避免master被标记?有没有更好的方法呢?现在,我在创建分支1.0之后的唯一选择是在master上进行一次小的提交,然后为1.1-dev或其他东西重新标记它.

然后重复每个版本.

但是,如果再对一个分支进行标记,比如1.0.1版本,那么它似乎也会标记master,因为那是先发生的事情?

git

6
推荐指数
2
解决办法
7869
查看次数

对于 graphql-codegen 生成的查询类型,出现“查询参数未知错误”

我使用 Pothos 构建 graphql 架构,并使用 graphql-codegen 生成基于该架构的类型。服务器通过 graphql-yoga 和 nextjs 运行,并且通过 graphiql 界面运行时实际查询工作正常。我一直在尝试进行设置,以便根据本文使用 apollo 客户端正确输入我的 gql 架构使用 apollo 客户端正确输入我的 gql 架构。

模式生成器的片段:

builder.queryType({
  fields: t => ({
    greetings: t.string({
      resolve: (root, args, context) => `Welcome ${context.session?.user?.nickname}`
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

graphql-codegen 在书面文件中生成以下类型.ts,因此我知道它看到了正确的架构。

export type Query = {
  __typename?: 'Query';
  greetings: Scalars['String'];
}
Run Code Online (Sandbox Code Playgroud)

但是,当我根据 codegen 文档导入 gql 文件时,它会返回unknown,并且 VSCode 的悬停窗口显示“查询参数未知!请重新生成类型。” 我尝试过重新生成并重新启动 VSCode,但没有任何变化。

import { gql } from '@/gql/gql'

const query = gql('query { greetings }')
Run Code Online (Sandbox Code Playgroud)

typescript graphql apollo-client graphql-codegen

6
推荐指数
2
解决办法
2580
查看次数

优化GROUP BY性能 - 增加大约五秒钟的查询时间

我正在大型数据库上运行各种各样的分析,这对我们的应用程序的用户来说是典型的.它存储了数百万条记录,我花时间确保字段类型是他们需要的(虽然我们也可以规范化并将这些列中的三列移动到外键).

默认情况下,查询按相关信息分组并计算重复记录的问题.这个小组会杀死我们 - 接受一个在0.08几秒钟内运行的查询并将其减慢到5.89平均水平.

一个示例查询:

SELECT player, x, y, z, COUNT(id), action_type
FROM prism_actions WHERE world = 'world'
AND (prism_actions.x BETWEEN -1119.650147217701 AND -919.650147217701)
AND (prism_actions.y BETWEEN -33.0 AND 167.0)
AND (prism_actions.z BETWEEN 385.14867792476133 AND 585.1486779247614) 
AND prism_actions.action_time >= '2013-01-31 17:09:16'
GROUP BY prism_actions.block_id 
LIMIT 1000;
Run Code Online (Sandbox Code Playgroud)

我尝试了各种不同的查询,我们的应用可能会使用,分组是最大的性能命中之一.

我们目前的表结构:

CREATE TABLE IF NOT EXISTS `prism_actions` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `action_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `action_type` varchar(25) NOT NULL,
  `player` varchar(16) NOT NULL,
  `world` …
Run Code Online (Sandbox Code Playgroud)

mysql

5
推荐指数
1
解决办法
1587
查看次数

基于x/y坐标高效查找数组元素

我写了一个java自上而下的2D游戏,它使用生成的图块作为地图.每个图块由包含其x/y坐标的Tile类描述.

当玩家在地图上移动时,我需要能够让玩家"打开".玩家类知道它当前的x/y,并且Tile类知道它被分配给的x/y.

目前,需要渲染的所有图块都存储在a中Tile[][].我对java很新,但似乎不是一个好主意(如果可能的话)只是简单地使用我想要的数据索引的x/y坐标 - 主要是因为我目前渲染的瓷砖可能并不总是从...开始0,0.假设玩家在他们所在的时候加载了一个已保存的游戏1000,1000- 我当然不会在不需要时加载瓷砖0,0.

那么,对我来说存储这些坐标的最佳方式是什么?

在PHP中,它可以完成,因为我知道数组不关心从0开始的索引:

$tiles[1000][1000] = new Tile()

但我不确定Java中推荐的方法是什么.必须迭代每个单独的图块并检查x/y是否匹配,效率非常低.

java

5
推荐指数
0
解决办法
767
查看次数

排除具有空二进制列数据的记录

binary(16) not null在mysql表中有一列类型。并非所有记录在此列中都有数据,但是因为它设置为禁止NULL此类记录具有全零值。

我想从查询中排除这些全零记录。

到目前为止,我能找到的唯一解决方案是对HEX值进行比较:

SELECT uuid
FROM example
WHERE HEX(uuid) != '00000000000000000000000000000000'
Run Code Online (Sandbox Code Playgroud)

哪个有效,但是有更好的方法吗?

mysql comparison binary-data

5
推荐指数
1
解决办法
842
查看次数

将屏幕坐标转换为等距地图坐标

我正在使用菱形图案生成等距瓷砖地图:

tileWidth = 128;
tileHeight = 94;

for (var x = 0; x < rows; x++) {
  for (var y = 0; y < cols; y++) {
    var screenX = (x - y) * tileWidthHalf;
    var screenY = (x + y) * tileHeightHalf;
    drawTile(screenX, screenY);
  }
}
Run Code Online (Sandbox Code Playgroud)

这可以正确渲染,但现在我在将屏幕坐标(鼠标位置)转换回等距坐标时遇到问题。

我尝试过反转数学:

var x = _.floor(screenY / (tileWidth / 2) - (screenX / tileWidth / 2));
var y = _.floor(screenY / (tileHeight / 2) + (screenX / tileHeight / 2));
Run Code Online (Sandbox Code Playgroud)

它对于瓷砖效果很好0, 0 …

javascript math game-engine pixi.js

5
推荐指数
1
解决办法
2746
查看次数

Unity 的 IsPointerOverGameObject 返回不一致

OnMouseDown我注意到,如果后面有世界空间对象,用户界面上的鼠标点击也会触发 Unity和类似的事件。

经过研究,我发现EventSystems.current.IsPointerOverGameObject()Unity 文档没有很好地解释这一点。

根据解释,当指针位于ui 对象上方时,它应该返回 true,但这不是我的经验。

使用它时,它会false在超过一个 Collider2D、true超过另一个 Collider2D 以及true超过 UI 对象时返回。

我不明白它使用什么逻辑来确定何时显示 true 与 false。它的名字很糟糕,因为一切都是“GameObject”。

如果我能找出导致错误信息的原因,我就能​​修复它。

否则,当有人单击 UI 元素中的任意位置时,我需要一种替代方法来忽略世界空间单击。

编辑:看来这EventSystem.current.currentSelectedGameObject != null是一个更有价值的指标。当单击发生时,该值具有实际的 UI 对象,但对于非 UI 对象则不然。它仅在OnMouseDown和中有用OnMouseDrag,因为它的价值仅存在于点击时。

unity-game-engine

5
推荐指数
0
解决办法
1006
查看次数