小编Jac*_*ack的帖子

获取用于开发的Chrome扩展ID

虽然类似于这个问题,但我不是问:

在什么条件下,分机的ID会发生变化?

也不

如何将我的zip存档上传到Chrome控制台?

不过我问,如何在不使用Chrome控制台的情况下获取扩展程序的密钥.因此,我不认为这是这个问题的重复.

在Chrome扩展程序中使用Google身份文档说明需要将扩展​​程序的密钥复制到其清单文件中.

要使应用程序ID保持不变,您需要将已安装的manifest.json中的密钥复制到源清单.

但是,当导航到推荐目录(... Google/Chrome/Default/Extensions)时,我看不到解压缩扩展名的ID.我意识到这是因为扩展名没有安装为.crx文件.但是,为了开发目的,文档清楚地写了:

将已安装的manifest.json中的密钥复制到源清单,以便您的应用程序ID在开发期间保持不变.

如何在每次更改时避免打包扩展程序并重新安装?如果我的开发扩展没有安装的清单文件,我可以从中获取扩展的密钥,我在哪里可以获取它?

google-chrome-extension

46
推荐指数
3
解决办法
2万
查看次数

Visual Studio Code pylint:无法导入'protorpc'

我在Visual Studio Code中使用pylint来开发Python中的Google App Engine(GAE)Cloud Endpoint API.我无法解决lint错误.我不知道是什么导致了错误,但是猜测,pylint找不到库?protorpc

在此输入图像描述

故障排除Linting中的建议修复是将工作空间设置配置为指向完全限定的python可执行文件.我已经这样做了,但皮棉错误仍然存​​在.

在此输入图像描述

protorpc 本身安装到:

~/google-cloud-sdk/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)

...这包含remote.py无法导入的模块:

__init__.py             generate_python.py      protojson.py            transport.py
definition.py           google_imports.py       protourlencode.py       util.py
descriptor.py           message_types.py        registry.py             webapp
generate.py             messages.py             remote.py               wsgi
generate_proto.py       protobuf.py             static
Run Code Online (Sandbox Code Playgroud)

我已将此路径添加到$PYTHONPATH(与厨房水槽一起):

export GOOGLE_CLOUD_SDK=~/google-cloud-sdk
export APPENGINE_PATH=$GOOGLE_CLOUD_SDK/platform/google_appengine

export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/lib/googlecloudsdk/api_lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib
export PYTHONPATH=$PYTHONPATH:$GOOGLE_CLOUD_SDK/platform/google_appengine/lib/protorpc-1.0/protorpc
Run Code Online (Sandbox Code Playgroud)

应用程序在本地运行,也在部署时运行,因此这似乎只是一个lint错误,但令人沮丧的是我无法解决它.

使用第三方库声明:

标准环境中的Python运行时包括Python标准库,App Engine库和一些捆绑的第三方软件包.

因此,我认为 "App Engine库"包括protorpc,但我不确定.此外,将Cloud Endpoints Frameworks库添加到示例API …

python google-app-engine visual-studio python-2.7 protorpc

31
推荐指数
8
解决办法
5万
查看次数

Backbone.js - 嵌套视图是否应该保持对彼此的引用?

如果Backbone View在其render()方法中创建新视图,那么这些视图是否应该作为数据成员维护?典型的渲染方法如下所示:

render: function() {
  var myView = new MyView({ model: values });
  $('div#value', this.el).append(myView.render().el);
}
Run Code Online (Sandbox Code Playgroud)

这种渲染方法的链接意味着嵌套的视图实际上只是创建,因此它也可以链接任何渲染方法并返回一个构造良好的元素.我假设视图留给垃圾收集?

如果要修改嵌套视图......可能很重要,是应该(重新)创建,还是应该通过数据成员引用进行修改?

我遇到的问题是嵌套的视图接收事件,要求他们修改自己的嵌套视图,有时他们的父视图.

我真的不想在各地开始投掷听众.传递对父视图的引用并从子视图调用render()会导致内存泄漏,因为父视图会创建一个新的子视图,而原始子视图会维护对其父视图的引用!

目前它不像框架那样.有没有人有任何资源可以帮助我以类似框架的方式解决这个问题?

backbone.js

21
推荐指数
1
解决办法
3985
查看次数

服务更改时更新Angular JS指令

我试图按照这个SO答案解释如何使用指令呈现递归JSON结构.然而,与提供的答案,我的数据是不是在DOM加载和运行的角度,第一次知道.

相反,我的数据从HTML输入字段中检索并存储在Angular Service中(当用户提交表单时).

在修改服务数据时,如何使Angular Directive保持最新状态?


更新以回应答案

@musically_ut提供了一个很好的答案,但是却揭示了一个相关的问题,阻止了一个实现(在这里更新).

指令呈现包含Angular的HTML,该Angular {{expressions}}访问存储在其中的数据$scope.因为最初的解决方案是$watch服务准备好数据时.如何在指令渲染$scope 之前确保添加"新"数据?

架构和流程概述如下:

  1. ControllerA - >从用户那里获得输入
  2. ControllerA- >使用服务转换数据
  3. ControllerB- > $watch更改服务
  4. Directive- > $watch更改服务
  5. ControllerB - >添加数据 $scope
  6. Directive- > 使用指令显示转换后的数据(来自服务)

问题出在步骤5和6之间.指令{{expressions}}在ControllerB添加数据之前呈现$scope.即使这确实有效,但感觉太复杂和"hacky".

实际上,为了回归,我正在使用$watchControllerB来监听转换后的数据何时在服务中准备就绪.即使这感觉有点矫枉过正(该服务不会进行异步调用).

angularjs angularjs-directive

18
推荐指数
1
解决办法
1万
查看次数

从源代码构建Android - 模拟器和AVD

我已经为模拟器构建了Android源代码.我在Android Source文档中读到,在成功构建期间会自动添加"模拟器"的路径.但是我有两个问题:

  1. 如果我打开一个新shell或关闭我现有的shell,则不再找到"模拟器".当然我每次想要运行模拟器时都不需要构建?

  2. 如果模拟器需要AVD,我如何创建和管理这些,因为我的机器上没有Android SDK?

谢谢,杰克

第2部分的解决方案.

我需要创建一个名为ANDROID_PRODUCT_OUT的环境变量.从以下命令:

emulator -help-build-images
Run Code Online (Sandbox Code Playgroud)

我读...

通过查看环境中的ANDROID_PRODUCT_OUT变量,模拟器检测到您正在使用Android构建系统.

如果已定义,则应指向包含生成的系统映像的特定于产品的目录.

然后我在'out'目录中搜索'system.ing'.因为我正在为模拟器构建图像所在:

out/target/product/generic
Run Code Online (Sandbox Code Playgroud)

我将以下行添加到我的.bashrc文件中:

export ANDROID_PRODUCT_OUT=/home/jack.wootton/code/out/target/product/generic
Run Code Online (Sandbox Code Playgroud)

然后我能够从以下位置运行模拟器:

/home/jack.wootton/code/out/host/linux-x86/bin
Run Code Online (Sandbox Code Playgroud)

第1部分的解决方案.

我不知道Android虚拟设备,所以这个问题仍然存在 - 但是在成功构建并设置ANDROID_PRODUCT_OUT环境变量之后,我不需要提供一个来运行模拟器.

更新解决方案

显然,应该在构建期间使用envSetup.sh脚本自动创建ANDROID_PRODUCT_OUT等变量.我想我的环境设置出了问题就是没有发生.

android open-source android-emulator android-source

13
推荐指数
2
解决办法
2万
查看次数

我应该为AngularJS使用Angular材料还是材质?

Angular的GitHub页面显示了与Material Design相关的两个固定存储库:

  1. 角/材料2
  2. 角/材料

README.md角/材料的标题为AngularJS应用材料设计.

README.md角/材料2的题目是材料设计的角度.

我使用的是建立一个Angular2 Web应用程序的角度,CLI,并都安装进口 @angular/materialapp.module.ts.

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { HttpModule } from '@angular/http';
import { MaterialModule } from '@angular/material'
import { FlexLayoutModule } from '@angular/flex-layout'

    @NgModule({
      declarations: [
        AppComponent,
      ],
      imports: [
        BrowserModule,
        HttpModule,
        FlexLayoutModule,
        MaterialModule
      ],
      providers: [],
      bootstrap: [AppComponent]
    })
    export class AppModule …
Run Code Online (Sandbox Code Playgroud)

javascript angular-material angular-material2 angular

11
推荐指数
1
解决办法
2718
查看次数

检索添加到Backbone.js Collection的项目的索引位置

如果我将一个项目添加到Collection中,如何找到添加它的位置?用于添加Underscore.js文档表明,实现此目的的唯一方法是绑定到add事件.

还有其他方法吗?如果没有,那我怎样才能从我的回调中重新索引索引?我尝试提供回调:

foo:function(model, options) {
  console.log("foo: " + options.index);
},
Run Code Online (Sandbox Code Playgroud)

但是options.index是undefined.我用这段代码绑定到事件:

this.collection.bind('add', this.foo);
Run Code Online (Sandbox Code Playgroud)

并使用以下代码添加项目:

this.collection.add(myNewItem);
Run Code Online (Sandbox Code Playgroud)

该系列中的模型是:

MyModel = Backbone.Model.extend({
defaults : {
   key:undefined,
   myObj:undefined,
},
Run Code Online (Sandbox Code Playgroud)

该系列是:

MyModel List = Backbone.Collection.extend({
      model: MyModel,

initialize: function() {
   this.comparator = function(aModel) {
   return aModel.get('key'); 
  };
 }});
Run Code Online (Sandbox Code Playgroud)

我将模型添加到集合中:

 var key = "always_the_same";
var mm = new MyModel({key:key});
this.collection.add(mm);
var index = this.collection.sortedIndex(mm , this.collection.comparator));
Run Code Online (Sandbox Code Playgroud)

更新

问题是(我认为),比较器函数用于indexOf和sortedIndexOf,因此,就比较器函数而言,具有相同键的两个对象实际上是相同的对象.

我曾希望*CID将用于确保对象实际上是我在已经排序的集合中寻找的对象.但似乎没有.我想一个可能的解决方案是更改我的比较器功能以包含CID:

initialize: function() {
        this.comparator = function(aModel) {
          return aModel.get('key') + aModel.cid; …
Run Code Online (Sandbox Code Playgroud)

backbone.js underscore.js backbone.js-collections

10
推荐指数
2
解决办法
1万
查看次数

我应该取消订阅 Angular Form 更改吗?

当使用valueChanges订阅Angular Abstract Control中的更改时,是否有必要?unsubscribe()

我经常这样做:

// this.form is a FormGroup within a Component.

this.form.valueChanges.subscribe(_ => {
  console.log(this.form.value);
});
Run Code Online (Sandbox Code Playgroud)

但是我应该自己管理订阅吗(就像我通常所做的ngrx那样)?:

import { Subscription } from 'rxjs';

// this.subscription is ngrx Subscription.

this.subscription = this.form.valueChanges.subscribe(_ => {
      console.log(this.form.value);
});

public ngOnDestroy() {
  if (this.subscription) {
      this.subscription.unsubscribe();
   }
}
Run Code Online (Sandbox Code Playgroud)

我之前没有这样做的唯一原因是因为关于 Angular Forms 的教程、示例和文档通常会省略存储对订阅的引用,而是按原样使用valueChanges

相反,ngrx 教程似乎强调了取消订阅以避免内存泄漏的重要性。

javascript observable ngrx angular

8
推荐指数
1
解决办法
2539
查看次数

当配置为不配置时,自定义 Angular FormField 发出事件

这个问题有一个Stackblitz:stackblitz.com/edit/angular-material-starter-template-8ojscv

我已经实现了一个包装CodeMirror的自定义 Angular Material FormField

在我的应用程序组件中,我订阅表单控件上的valueChanges以监听用户键入:

export class AppComponent implements OnInit {
   // Custom value accessor for CodeMirror.
   control: FormControl = new FormControl('', {updateOn: 'change'});

   ngOnInit() {
    // Listen for the user typing in CodeMirror.
    this.control.valueChanges.pipe(
        debounceTime(500),
        distinctUntilChanged(),
        tap((value: string) => {
          console.log(`The user typed "${value}"`);
        })
    ).subscribe();
  }
}
Run Code Online (Sandbox Code Playgroud)

我注意到,当使用setValue时,valueChanges Observable 会发出一个值,即使选项对象禁止它

// This appears to have no effect.
this.control.setValue(value, {
   // Prevent the statusChanges …
Run Code Online (Sandbox Code Playgroud)

rxjs typescript angular-material angular

8
推荐指数
1
解决办法
2635
查看次数

reCAPTCHA v3网络密集型Web应用程序

我在Angular 2应用程序中使用Google的reCAPTCHA v3来防止自动表单提交.当用户与UI交互时,我的应用程序在后台进行许多网络调用.

index.html,我做了一个故意阻塞调用来加载库(防止Angular世界在recaptcha/api.js加载之前进入):

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>
Run Code Online (Sandbox Code Playgroud)

从Angular Service的构造函数中,我使用DOCUMENT DI令牌来引用grecaptcha对象:

  constructor(@Inject(DOCUMENT) private document: any) {
    this.grecaptcha = this.document.grecaptcha;
  }
Run Code Online (Sandbox Code Playgroud)

一旦应用程序被加载(使用生命周期钩子),前面提到的Angular服务调用grecaptcha.execute获取唯一token(根据前端集成指南):

  public executeCaptcha() {
    this.grecaptcha.ready(() => {
      this.grecaptcha
        .execute(MyService.CAPTCHA_KEY, {
          action: 'execute'
        })
        .then((token: string) => this.token = token);
    });
  }
Run Code Online (Sandbox Code Playgroud)

token是回调的参数,并存储为Angular service(this.token = token))的成员.

此时,应用程序没有对我的后端进行任何API调用,也没有将用户验证为人.

token必须发送到我的后端服务器,后者又必须验证用户的响应通过做一个API请求. …

recaptcha angular

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