通常,我可以在 jQuery 中侦听的任何事件也可以在 Backbone 中侦听。换句话说,如果我有:
var MyView = Backbone.View.extend();
var view = new MyView();
view.$el.html('<button>');
var onClick = function() {
alert('woot!');
};
Run Code Online (Sandbox Code Playgroud)
我想在onClick点击按钮时触发,我可以这样做:
$('button').on('click', onClick);
Run Code Online (Sandbox Code Playgroud)
但是因为我使用的是 Backbone,所以我会这样做:
var MyView = Backbone.View.extend({
events: {click: onClick}
});
Run Code Online (Sandbox Code Playgroud)
但是,这不适load用于 iframe 事件,所以如果我有:
view.$el.html('<iframe src="www.stackoverflow.com"></iframe>');
var onLoad = function() {
alert('woot!');
};
Run Code Online (Sandbox Code Playgroud)
我可以:
$('iframe').on('load', onLoad);
Run Code Online (Sandbox Code Playgroud)
但我不能这样做:
events: {load: onLoad}
Run Code Online (Sandbox Code Playgroud)
我的问题分为两部分:1)为什么这不起作用,2)有什么办法可以解决它,但仍然使用 Backboneevents而不是原始 JQuery?
我有一个<input>元素,我无法修改它周围的HTML,但我想在其中添加一个glyphicon(<i class="glyphicons glyphicons-some-icon"/>).我希望用CSS做到这一点,但我似乎无法开始:after工作.我认为以下内容会生成该元素:
#my-input {
content: attr(class, 'glyphicons glyphicon-some-icon');
content: '<i/>';
}
Run Code Online (Sandbox Code Playgroud)
但事实并非如此.任何了解:after更好的人都可以解释我如何能够产生所需的<i class="glyphicons glyphicons-some-icon"/>用途:after吗?
我有一个<div>:
display: block;
max-width: 150px;
position: static;
overflow: hidden;
Run Code Online (Sandbox Code Playgroud)
但是, 的<div>宽度为530px,远远超出了max-width我指定的宽度,我不明白为什么。
当我在 Chrome 中检查时<div>,它非常清楚地显示了max-width正在应用的内容(并且没有被任何其他规则超越),但同时在“计算”选项卡中它清楚地显示了宽度530px。
不过,我并不是在寻求帮助来调试我的特殊情况。相反,我只是想了解在任何情况下,块级元素的overflow: hdden宽度如何超过其max-width.
显然我还没有完全理解它是如何max-width工作的。
我正在尝试通过其 Node 包使用 Google 的 Search Console API,我的代码如下所示:
const auth = new GoogleAuth({
scopes: 'https://www.googleapis.com/auth/webmasters.readonly',
});
const webmasters = google.webmasters('v3');
const params = {
auth,
siteUrl: 'example.com',
resource: {
startDate: '2015-08-25',
endDate: '2015-08-25',
dimensions: ['query', 'page'],
rowLimit: 10,
},
aggregationType: 'byPage',
};
const res = await webmasters.searchanalytics.query(params);
console.log(res.data);
Run Code Online (Sandbox Code Playgroud)
...除了在我的版本中example.com已替换为我的实际域。
我在命令行中调用它:
GOOGLE_APPLICATION_CREDENTIALS="/path/to/service_key.json" node index.js
Run Code Online (Sandbox Code Playgroud)
我创建了一个服务帐户,服务密钥 JSON 文件来自该帐户。该服务帐户可以访问我的 Search Console 帐户。当我查看https://search.google.com/search-console/users时,我看到那里的服务用户,并且在“权限”列中显示“完全”。
谁能帮助我理解为什么在运行代码时出现以下错误?
{
message: "User does not have sufficient permission for site 'http://example.com'. See also: https://support.google.com/webmasters/answer/2451999.",
domain: 'global', …Run Code Online (Sandbox Code Playgroud) google-api node.js google-api-nodejs-client google-search-console
所以根据我的JSP参考书,以及我可以在网上找到的所有其他参考,我应该能够做类似的事情:
<%@ tag dynamic-attributes="dynamicAttributesVar" %>
Run Code Online (Sandbox Code Playgroud)
然后当有人使用我没有在属性指令中定义的属性时,我应该能够从"dynamicAttributesVar"映射访问该属性:
<%= dynamicAttributesVar.get("someUnexpectedAttribute") %>
Run Code Online (Sandbox Code Playgroud)
但是,这根本不起作用; 我尝试时只得到"dynamicAttributesVar无法解析"错误.
现在,我确实发现(通过查看生成的标记的Java类),我可以通过执行以下操作来"破解"正在运行的动态属性变量:
<% Map dynamicAttributesVar = _jspx_dynamic_attrs; %>
Run Code Online (Sandbox Code Playgroud)
现在,除非我在tag指令中使用dynamic-attributes参数,否则该hack不起作用,所以看起来该参数正在做某事.
但我想知道的是,我怎样才能让它为其他每个JSP用户做它做的事情呢?
Stack Overflow已经有一些关于计算字符串出现次数的好帖子(例如"foo"),就像这样:用grep计算许多文件中出现的所有字符串.但是,我一直无法找到一个稍微复杂的变种的答案.
假设我想计算foo:[*whatever*]*whatever else*文件夹中存在多少个" "的实例; 我会做:
grep -or 'foo:[(.*)]' * | wc -l
Run Code Online (Sandbox Code Playgroud)
然后我会回到"55"(或无论数量是多少).但如果我有一个像这样的文件怎么办?
foo:bar abcd
foo:baz efgh
not relevant line
foo:bar xyz
Run Code Online (Sandbox Code Playgroud)
我想知道有多少个实例foo:bar与多少个foo:baz等等?换句话说,我希望输出这东西,如:
bar 2
baz 1
Run Code Online (Sandbox Code Playgroud)
我假设有一些链接greps或使用不同命令的方法wc,但我不知道它是什么...任何shell脚本专家都有任何建议吗?
PS我意识到,如果我知道可能的子串的集合(即,如果我知道只有"foo:bar"和"foo:baz"),这将更简单,但不幸的是有一些"可以来的东西在foo:"未知之后.
在我们的 Git 存储库中,我们有大约十个非常重要的文件。这些文件被许多其他文件引用,所以如果它们被移动,东西就会中断。但是由于我们的开发环境设置方式,这种损坏不会立即被检测到,所以会发生以下情况:1)开发人员移动了一个重要文件,2)他们推送了提交,3)几天后我们的系统管理员得到清理烂摊子。
为了防止这种情况,我们非常想找到一种方法来限制我们的 Git 存储库,以便只有某些用户可以更改这些文件。但是,我尝试搜索 Stack Overflow,到目前为止,我找到的唯一解决方案是预提交挂钩(或我们无法使用的工具,因为我们有 GitHub 而不是我们自己的 Git 安装)。
预提交钩子(让每个人都使用它很痛苦,并且很容易被禁用)是强制执行这样的事情的唯一方法吗?或者有没有其他方法可以限制用户在 Git 中对某些文件的更改?
在ES6中我可以导出一个简单的foo常量:
export const foo = 1;
Run Code Online (Sandbox Code Playgroud)
我还可以将该export(1)的值转换为变量,并导出:
const fooValue = 1;
export foo = fooValue;
Run Code Online (Sandbox Code Playgroud)
但我的问题是,有什么办法可以将export()的键转换foo为变量:
const fooLabel = 'foo';
const fooValue = 1;
export something(fooLabel) = fooValue;
Run Code Online (Sandbox Code Playgroud)
或者导出总是必须明确命名?
我有一个GraphQL端点:
app.use('/graphql', graphqlHTTP(request => ({
graphiql: true,
schema
})));
Run Code Online (Sandbox Code Playgroud)
我还具有用于登录(和处理回调,因为我使用的是Google OAuth2)的Passport路由:
this.app.get('/login', passport.authenticate('google'));
this.app.get('/auth/callback/google', ....
Run Code Online (Sandbox Code Playgroud)
Passport将用户添加到请求中,我可以在线找到的所有文章都建议在每个GraphQL解析器中使用该方法进行身份验证:
resolve: (root, args, { user }) => {
if (!user) throw new NotLoggedInError();
Run Code Online (Sandbox Code Playgroud)
但是,当将逻辑应用于所有解析器时,不必向每个解析器添加该逻辑,因此我希望以某种方式对整个端点进行身份验证。
问题是我不确定如何结合中间件。我尝试了以下操作,但是它破坏了端点:
app.use('/graphql', passport.authenticate('google'), graphqlHTTP(request => ({
graphiql: true,
schema
})));
Run Code Online (Sandbox Code Playgroud) TLDR:如果我想在Postgres表中保存整数数组,那么使用数组列(integer[])与使用JSON列是否有任何利弊(例如,哪一个比另一个表现更好)?
背景故事:
我正在使用PostgreSQL数据库和Node/Knex来管理它.Knex没有任何直接定义PostgreSQL integer[]列类型的方法,所以有人提出了一个Knex错误要求它...但是其中一个Knex开发者关闭了该票证,基本上说没有必要支持PostgreSQL数组列类型当任何人都可以使用JSON列类型时.
我的问题是,使用JSON列类型来保存一个简单的整数数组有什么缺点(如果有的话)?是否有任何好处,例如提高性能,使用真正的数组列,还是只需将我的数组存储在JSON列中,我同样可以获得好处?
编辑:只是要清楚,我在答案中寻找的是以下任何一种:
A)解释PostgreSQL中的JSON列和integer []列如何工作,包括一个如何优于另一个或两者如何(至少粗略地)相等.
B)没有解释,但至少提到一些基准,表明一个列类型或另一个列表现更好(或两者相等)
css ×2
backbone.js ×1
ecmascript-6 ×1
express ×1
git ×1
github ×1
glyphicons ×1
google-api ×1
graphql ×1
grep ×1
java ×1
javascript ×1
jsp ×1
knex.js ×1
node.js ×1
passport.js ×1
postgresql ×1
shell ×1
tags ×1