使用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)是一个有效的正则表达式,所以我错过了什么?
我正在使用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) 我一直在搜索Eslint规则文档,无法弄清楚如何在块之间强制执行换行符.
例如,在jscs中我可以拒绝这些因为没有分隔的新行:
if (!rows.length) {
// code
}
var pagination;
if (something) {
// code
}
Run Code Online (Sandbox Code Playgroud)
"space-before-blocks"听起来像是我想要的,但它只适用于空格而不是换行符.
我正在尝试确定一个良好的发布管理系统,并结合使用版本号标记的标记实践 - 例如,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,因为那是先发生的事情?
我使用 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) 我正在大型数据库上运行各种各样的分析,这对我们的应用程序的用户来说是典型的.它存储了数百万条记录,我花时间确保字段类型是他们需要的(虽然我们也可以规范化并将这些列中的三列移动到外键).
默认情况下,查询按相关信息分组并计算重复记录的问题.这个小组会杀死我们 - 接受一个在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) 我写了一个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是否匹配,效率非常低.
我binary(16) not null在mysql表中有一列类型。并非所有记录在此列中都有数据,但是因为它设置为禁止NULL此类记录具有全零值。
我想从查询中排除这些全零记录。
到目前为止,我能找到的唯一解决方案是对HEX值进行比较:
SELECT uuid
FROM example
WHERE HEX(uuid) != '00000000000000000000000000000000'
Run Code Online (Sandbox Code Playgroud)
哪个有效,但是有更好的方法吗?
我正在使用菱形图案生成等距瓷砖地图:
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 …
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,因为它的价值仅存在于点击时。
angularjs ×2
javascript ×2
mysql ×2
binary-data ×1
comparison ×1
eslint ×1
game-engine ×1
git ×1
graphql ×1
java ×1
math ×1
pixi.js ×1
regex ×1
typescript ×1