小编Mic*_*wis的帖子

JavaScript - myArray.forEach与for循环的细微差别

我见过很多建议使用的问题:

for (var i = 0; i < myArray.length; i++){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

代替:

for (var i in myArray){ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

对于数组,由于迭代不一致(参见此处).


但是,我似乎无法找到任何似乎更喜欢面向对象循环的东西:

myArray.forEach(function(item, index){ /* ... */ });
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎更直观.

对于我目前的项目,IE8的兼容性很重要,我正在考虑使用Mozilla的polyfill,但是我不能100%确定它是如何工作的.

  • 循环标准(上面的第一个例子)和现代浏览器的Array.prototype.forEach实现之间有什么区别吗?
  • 现代浏览器实现与上面链接的Mozilla实现之间有什么区别(特别是关于IE8)?
  • 性能不是一个问题,只是与迭代属性的一致性.

javascript arrays iterator for-loop internet-explorer-8

88
推荐指数
3
解决办法
4万
查看次数

Angular ui-router:ui-views vs指令?

角度UI路由器允许多个嵌套视图.这些可互换观点的作用似乎与指令的作用重叠.

使用(多个,嵌套)ui-views vs angular 指令的优缺点是什么?

UPDATE

状态和路由是两种不同的功能.States允许您交换partial.html模板及其控制器,您可以(可选地?)指定相应的URL /路由.

在Tim Kindberg(ui-router开发者)的电子邮件回复中:

ui-view是一个指令,所以如果你使用它,你使用的指令特别适用于ui-router模块的其余部分.我无法想象很容易推出自己的指令来替换这个功能.

对此,似乎你可以有两个选择:

正常指令:

app.directive('myDir1', {/*  controller: ... */})
   .directive('myDir2', {/*  controller: ... */}) 
Run Code Online (Sandbox Code Playgroud)

vs ui-view"Directives"

$stateProvider.state('route1', {
     /*  url: "/route1", // optional?? */
      views: {
        "myDir1": { templateUrl: "myDir1.html" /* , controller: ... */ },
        "myDir2": { templateUrl: "myDir2.html" /* , controller: ... */ }
      }
    })
Run Code Online (Sandbox Code Playgroud)

奖金问题:

视图中是否有正常的角度指示功能?如:

  • Transclude
  • 更换
  • 隔离范围
  • 编译/链接功能

如果ui-views ARE指令,似乎很清楚它们的用法是不同的.协调这些模型是不是有意义?

angularjs angular-ui angular-ui-router

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

Angular ui-router:你可以在不改变URL的情况下改变状态吗?

多重嵌套视图的功能ui-router是很不错的-你可以很容易地从一个跳跃状态您的应用程序到另一个.

有时您可能想要更改URL,但有时不想.我觉得状态的概念应该与路由分开/可选.

这是一个显示我的意思的plunker. 这是ui-router文档中其中一个掠夺者的分支,下面有两个小的更改:

.state('route1', {
        url: "/route", // <---- URL IS SHARED WITH ROUTE2
        views: {
            "viewA": {
                template: "route1.viewA"
            },
            "viewB": {
                template: "route1.viewB"
            }
        }
    })
    .state('route2', {
        url: "/route", // <---- URL IS SHARED WITH ROUTE1
        views: {
            "viewA": {
                template: "route2.viewA"
            },
            "viewB": {
                template: "route2.viewB"
            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

这似乎有效 - URL保持不变.再次,这里做了多少冗余工作?这是经过批准/测试的用法吗?

如果你可以省略url一个州,那将是很好的..

更新:您可以省略州的网址.plunker

更新问题:这是经过批准/测试的用法吗?

javascript angularjs angular-ui angular-ui-router

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

AngularJS - 如何添加多个ng-class指令?

以下是使用该ng-class指令的两种不同方法.我需要它们,在同一个元素上,但这不起作用.

在ng-class中使用对象

http://plnkr.co/edit/uZNK7I?p=preview

<div ng-repeat="item in [1, 2, 3, 4, 5]" 
     ng-class="{ first: $first, last: $last }">{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

正确的结果

<div class="first">1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div class="last">5</div>
Run Code Online (Sandbox Code Playgroud)

在ng-class中使用表达式

http://plnkr.co/edit/tp6lgR?p=preview

<div ng-repeat="item in [1, 2, 3, 4, 5]" 
     ng-class=" 'count-' + ($index + 1) ">{{item}}</div>
Run Code Online (Sandbox Code Playgroud)

正确的结果

<div class="count-1">1</div>
<div class="count-2">2</div>
<div class="count-3">3</div>
<div class="count-4">4</div>
<div class="count-5">5</div>
Run Code Online (Sandbox Code Playgroud)

现在,如何一起使用它们?

我需要动态类名(如'count-' + n),但也需要多个类的对象语法.

我不能只使用2个ng-class属性(http://plnkr.co/edit/OLaYke?p=preview),只有第一个属性有效.

有什么建议?

javascript angularjs ng-class

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

节点/ JavaScript glob文件/路径匹配语法,通配符等

我刚刚找到了http://gruntjs.com/configuring-tasks#globbing-patterns,这是我发现的最有用的参考资料.

我一直看到:

有关glob模式语法的更多信息,请参阅node-glob和minimatch文档.

然而,我似乎找不到详尽的语法/用法列表. 这些测试可能是最好的参考,但仍然不是特别容易破译.

看来我必须缺少一些重要的文档来源.

我想知道之间的区别:

path
path/
path/*
path/*.*
path/**
path/**/
path/**/*
path/**/*.*
Run Code Online (Sandbox Code Playgroud)

以及我可能省略的任何其他重要变化.我猜这在做node-glob样式匹配('public/**/*.*')和a .gitignore(node_modules)时应用的方式不同,因为在前者中,你需要明确地包含所有东西,很多层深,而在gitignore中,这是通过忽略任何目录自动处理的.它是否正确?

javascript glob node.js

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

堆栈CSS转换使用多个类而不覆盖

我想使用多个类来选择性地添加转换.而不是堆叠,前一个被覆盖.

.container { transition: margin .2s; }
.container.t-padding { transition: padding .2s; }
Run Code Online (Sandbox Code Playgroud)

问题:属性被覆盖而不是堆叠

http://jsfiddle.net/yz2J8/2/(问题)

我的临时解决方案:将先前的转换添加到规则中

.container { transition: margin .2s; }
.container.t-padding { transition: padding .2s, margin .2s; }
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/ZfQcp/6/(我的临时解决方案)

什么是更好的解决方案?

如何避免创建大量规则来组合这些规则?

css css-transitions

12
推荐指数
1
解决办法
1542
查看次数

Grunt:致命错误:观看EPERM

您可以在此处查看/克隆完整代码:https://github.com/mlewisTW/grunt-tests

我想观看src目录(来缩小,CONCAT,少等),这使一切都入build目录.我也想观看build目录,以livereload.这是手表配置代码段:

watch: {
        options: {
            livereload: false
        },
        build: {
            files: ['<%= srcDir %>/**/*'],
            tasks: 'build'
        },
        reload: {
            files: ['<%= buildDir %>/**/*'],
            options: {
                livereload: true
            }
        }
    },
Run Code Online (Sandbox Code Playgroud)

我在Windows 8上.Fatal error: watch EPERM当我更改文件时,我得到了一个,它开始了build任务的第一步(干净).我猜这与我正在尝试删除一个监视目录的事实有关.

有没有办法在我构建时关闭livereload watch任务,然后在完成后重新启动它?

还有其他/更好的方法吗?

node.js gruntjs livereload grunt-contrib-watch

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

为什么jQuery构造函数映射到jQuery.fn.init?

jQuery构造它的功能有点映射到另一个构造函数,jQuery.fn.init:

jQuery = function( selector, context ) {
    return new jQuery.fn.init( selector, context, rootjQuery );
},
Run Code Online (Sandbox Code Playgroud)

我想知道为什么.

这个问题是非常相似的,但即使是回答者承认他们并没有真正回答这个问题,即为什么

这个问题仍然没有答案

这仅仅是出于组织目的吗?可能作者想要打包它,而不是将init函数放在jQuery构造函数定义中.

是否有任何理由.init()在原型上使用该方法? 我认为没有人会使用过$('.something')...init()...

这个问题表明它没有必要.init在原型上.

我刚刚发现这个问题,其中Dan Herbert的回答表明它只是出于结构/可读性的目的.

总之,我可以确认这个构造函数/原型映射搞笑 - 业务是不必要的吗? 在我看来,jQuery.fn.init功能可以去:

  • 在关闭的任何地方
  • jQuery对象上(jQuery.initvs jQuery.fn.init)
  • 或者,对我来说最有意义的是:直接在jQuery函数/构造函数定义中,替换new jQuery.fn.init并避免jQuery.fn.init.prototype = jQuery.fn映射.

javascript jquery

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

Eclipse 用制表符而不是空格缩进新行

我已经遵循了这里的所有建议。

当我按下 时return,我得到一个新的一行,它用制表符而不是空格缩进。

如果我退格以清除选项卡,然后按 TAB 一系列时间,它会正确缩进空格

我很确定我的所有设置都正确设置。我Code Style > Formatter为项目中的每种语言创建了一个新策略,并指定始终使用空格。似乎这些设置部分处于活动状态(例如:当我按下时tab),但在我使用return. 我尝试重新启动 Eclipse。我现在试试重启电脑...

我正在使用 Eclipse 的 Mac OS X 10.9.2 和 Liferay Developer Studio (1.6.3.v201312111844) 版本(但不确定是基于哪个 Eclipse 构建的)。

谁能想到另一种设置/解决方案来确保用空格而不是制表符创建换行符?我最近看到了http://editorconfig.org/,我想知道是否有一些干扰。

感谢您的任何建议

eclipse whitespace tabs liferay liferay-ide

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

使用jQuery更改CSS规则定义

例如,假设您想要更改许多元素的宽度,以模拟表格.我意识到你可以做到这一点:

$(".class").css('width', '421px');
Run Code Online (Sandbox Code Playgroud)

这会改变每个元素的内联style='width: 421px;'属性.现在,我想要做的是:改变实际的CSS规则定义:

.class {
    width: 375px;  ==[change to]==> 421px;
}
Run Code Online (Sandbox Code Playgroud)

当涉及到100而不是1000的嵌套<ul>并且<li>需要更改时,似乎这比尝试让jQuery通过该.css()方法完成工作更好.

我找到了这个例子 - 这就是我要做的事情:

var style = $('<style>.class { width: 421px; }</style>')
$('html > head').append(style);
Run Code Online (Sandbox Code Playgroud)

我不是要交换classes($el.removeClass().addClass()),因为我不能为每个最佳宽度(379px,387px,402px ..)提供类.

我可以创建一个<style>元素并动态设置宽度,但我认为有更好的方法.

javascript css jquery

5
推荐指数
2
解决办法
8763
查看次数