小编pos*_*est的帖子

AngularJS指令:与指令一起使用的表达式'undefined'是不可赋值的

我是一个2周大的Angular noob,我现在已经尝试了我的第一个指令超过一天了.:P我已经读过这个这个,看起来很好的指令介绍和一堆Stackoverflow答案,但我不能让这个工作.

<div ng-app="App" ng-controller="Main">
  <textarea caret caret-position="uiState.caretPosition"></textarea>
  {{uiState.caretPosition}}
</div>
Run Code Online (Sandbox Code Playgroud)

angular.module('App', [])
  .controller('Main', ['$scope', function ($scope) {
    $scope.uiState = {};
    $scope.uiState.caretPosition = 0;
  }])


  .directive('caret', function() {
    return {
      restrict: 'A',
      scope: {caretPosition: '='},
      link: function(scope, element, attrs) {
        var $el = angular.element(element);
        $el.on('keyup', function() {
          scope.caretPosition = $el.caret();
        });
      }
    };
  }); 
Run Code Online (Sandbox Code Playgroud)

小提琴就在这里.我基本上试图在文本框中获得插入位置.我在小提琴中使用这个jQuery插件(.caret()方法的源代码,它应该只返回一个数字).

我的问题是

  1. 我甚至需要一个指令吗? Ben Nadel说最好的指令就是你不必写的指令(对此而言!)
  2. 如果是,这是正确的指令方式吗?即具有双向约束变量的孤立范围?
  3. 如果是,当我在本地运行此代码时,我不断收到错误Expression 'undefined' used with directive 'caret' is non-assignable!.我已经阅读了文档 …

angularjs angularjs-directive

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

为什么流行的JavaScript运行时不能处理看起来同步的异步脚本?

正如牛仔在这里的评论中所说,我们都想"以类似于这样的风格编写[非阻塞JavaScript]异步代码:

 try 
 {
    var foo = getSomething();   // async call that would normally block
    var bar = doSomething(foo);  
    console.log(bar); 
 } 
 catch (error) 
 {
    console.error(error);
 }
Run Code Online (Sandbox Code Playgroud)

"

所以人们已经提出了解决这个问题的方法

但是这些都没有导致代码像上面的同步样式代码一样简单易懂.

那么为什么javascript编译器/解释器不能阻止我们目前称为"阻塞"的语句呢?那么,为什么javascript编译器/解释器无法处理AS上面的同步语法,如果我们以异步方式编写它?"

例如,在getSomething()上面的处理中,编译器/解释器可以只说"这个语句是对[文件系统/网络资源/ ...]的调用,所以我会做一个注释来听取来自该调用的响应和同时继续我的事件循环中的任何东西".当调用返回时,执行可以继续doSomething().

您仍然可以维护流行的JavaScript运行时环境的所有基本功能

  • 单线程
  • 事件循环
  • "异步"处理阻塞操作(I/O,网络,等待计时器)

这只是对语法的一种调整,这将允许解释器在IT DETECTS一个异步操作时暂停执行任何给定的代码位,而不是需要回调,代码只是在调用异步调用后从行继续执行回报.

正如杰里米所说

JavaScript运行时中没有任何内容可以预先暂停执行给定任务,允许其他代码执行一段时间,然后恢复原始任务

为什么不?(如同,"为什么不能有?"......我对历史课不感兴趣)

为什么开发人员必须关心语句是否阻塞?计算机用于自动化人类擅长的东西(例如编写非阻塞代码).

您也许可以实现它

  • 像这样的陈述"use noblock"; (有点像"use strict";)打开整个代码页的"模式".编辑:"use noblock"; 这是一个糟糕的选择,误导了一些回答者,我试图完全改变常见的JavaScript运行时的性质.喜欢的东西'use syncsyntax';可能会更好地描述它.
  • 某种parallel(fn, fn, ...); …

javascript error-handling asynchronous node.js ecmascript-6

8
推荐指数
2
解决办法
1624
查看次数

数据绑定对象的角度性能限制:我现在放弃AngularJS吗?

本文下面的讨论中,Renan Cakirerk评论说,根据Angular开发人员的说法,Angular UI性能可能会降低到2000个数据绑定对象之外.

这让我认真考虑用Angular追求我的非平凡应用程序是一个好主意.一个好的应用程序毕竟是一个快速的应用程序 我不想花几个月的时间来建造一些最终被咬的东西.

我有兴趣听听Angular 非平凡应用程序构建者的消息

  • 人们成功用于处理性能下降的一般策略
  • 基于我的要求和设计模式的具体策略(下)
  • 我是否应该在项目的早期阶段完全放弃Angular以避免迫在眉睫的"停止"

等待可能的"ES6电源和性能Object.observe未来"和未来版本的风险太高,这可能会让开发人员对$apply/ $digest循环进行更细粒度的控制,从而$scope可以触发有限的脏检查"(Brian Frichette提到这些在同一个讨论中.)我想知道复杂的应用程序今天在v1.2.15上可以很快.

关于我的问题/解决方案的更多细节

我正在构建一个具有非常丰富功能的应用程序,其中每个对象(例如用户)具有许多可以对其执行的功能,例如将它们链接到其他用户,更改其属性,向其发送消息等.

该规范在此对象上有超过20个函数:可放置区域,上下文敏感的工具栏图标(例如,当您选择某些文本时,Word具有出现在鼠标附近的迷你工具栏的方式).

这些选项需要隐藏和显示基于某些鼠标操作,如悬停和拖动,并依赖于特定用户对象的状态(许多图标和拖放选项将在某些情况下显示而不是其他情况)

现在,我开始构建它的方法是将每个单独的图标和拖放区域,拖动句柄等作为单独的数据绑定元素与ng-show(或类似)键入我们的自定义业务逻辑.

例如

<user>
  <menuicon1 ng-show="business-logic1"/>
  <menuicon2 ng-show="business-logic2"/>
  <dropzone1 ng-show="business-logic3"/>
  <draghandle ng-show="business-logic4"/>
  <changessavedicon ng-show="business-logic5"/>
  .....
</user>
Run Code Online (Sandbox Code Playgroud)

假设上面的2000理论极限是可怕的,那么20个自定义可显示的可隐藏位意味着100个用户(使用惊人的ng-repeat显示)是我的极限!也许显示100是愚蠢的,我可以通过过滤等攻击这个,但在我看来,除以20大大减少了我的对象"带宽".当老板希望增加10个功能时会发生什么?

如果我以jQuery方式执行此操作,我可能会根据需要构建和销毁许多图标和菜单项.每个悬停/拖动的响应性稍差,但至少应用程序可以按比例缩放对象的数量.

architecture performance angularjs

6
推荐指数
1
解决办法
1914
查看次数

AngularJS:遍历嵌套数组

我正在使用具有结构的嵌套数组...

$scope.items = [{attr1: val1, 
  attr2: val2,
  items: [{
     attr1: val1, 
     attr2: val2,
     items: [{
     ... 
     }, ...]
  }, ...]
}, ...];
Run Code Online (Sandbox Code Playgroud)

它进入一个ng-repeatng-include像这样

<div ng-repeat="item in items" ng-include="'/path/to/template.tpl.html'"></div>
Run Code Online (Sandbox Code Playgroud)

并且template.tpl.html

<div>{{item.attr1}}<\div>
<div>{{item.attr2}}<\div>
<div ng-click="fnAddNewItemBelow(item, $parent)"><\div>
<div ng-repeat="item in item.items" ng-include="'/path/to/template.tpl.html'"><\div>
Run Code Online (Sandbox Code Playgroud)

现在,在控制器中,我通常想要做的事情

  • 找到一个项目的父项
  • 找一个项目的兄弟姐妹
  • 算上兄弟姐妹
  • 找出项目嵌套的深度级别
  • 在嵌套的任何级别插入或删除项目

但我不确定如何优雅地做到这一点.我想想要实现fnAddNewItemBelow.我能解决的两个选择是

遍历范围

使用Angular提供的嵌套范围结构

// pseudo-code only
$scope.fnAddNewItemBelow = function (item, parent) {
  var newItem = ...;

  // add newItem as a sibling after the item that was …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-ng-repeat

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

AWS Cloudfront延迟:原始获取与互联网

通过Cloudfront从原始站点首次获取任何给定文件的平均速度是否比通过Internet从原始站点直接获取的速度更快?我想知道AWS骨干网是否以某种方式超过了公共互联网的速度。

例如,如果悉尼的用户想要从我的S3在欧洲获取文件,而Cloudfront尚未对其进行缓存,是通过互联网直接获取文件,还是让Cloudfront从欧洲来源获取文件到悉尼边缘?缓存并在最后几跳访问互联网?但这只是一个例子。用户将遍及全球,许多人将在起源地的欧洲。

我确实知道,发出CDN的请求将缓存文件,而来自悉尼的对该文件TTL内该文件的后续请求将更快,但是在我的用例中,后续请求不会经常发生...

我在S3上收集了大量小文件(<1MB),很少更改,并且很少单独下载它们,它们的TTL大约为1周。

我很好奇,在这种情况下,将Cloudfront置于S3前面是否值得,即使我不会从CDN提供的边缘缓存服务中获得太多价值。

因此,我应该期望那些首次获取方案的平均延迟减少吗?

编辑:我随后发现这篇文章提到了“持久连接...减少了总体延迟...”,但是我怀疑这只是意味着Cloudfront到起源子系统的更好性能,而不一定是更好的端到端性能为用户。

amazon-cloudfront

3
推荐指数
1
解决办法
599
查看次数

Postgresql:数组的动态切片表示法

读完这篇文章后,我写了一个天真的尝试来制作这个

col1
---------
1
4
7
Run Code Online (Sandbox Code Playgroud)

由此

ARRAY[[1,2,3], [4,5,6], [7,8,9]]

这有效

SELECT unnest((ARRAY[[1,2,3], [4,5,6], [7,8,9]])[1:3][1:1]);

但就我而言,我不知道外部数组的长度。

那么有没有一种方法可以将切片“字符串”组合在一起以考虑到这种可变性?

这是我的尝试。我知道,这有点好笑

_ids := _ids_2D[('1:' || array_length(_ids_2D, 1)::text)::int][1:1];

正如你所看到的,我只是想创建 的效果[1:n]。显然'1:3'不会很好地解析数组切片所需的内容。

我显然可以使用unnest_2d_1d上面链接的答案中欧文提到的东西,但希望有更优雅的东西。

arrays postgresql

0
推荐指数
1
解决办法
1654
查看次数