小编Wat*_*oll的帖子

如何做异步JavaScript getter和setter?

想想Rails如何允许您将属性定义为与另一个属性相关联:

class Customer < ActiveRecord::Base
  has_many :orders
end
Run Code Online (Sandbox Code Playgroud)

这不会为其设置数据库列orders.相反,它创造了一个吸气剂orders,这使我们能够做到

@orders = @customer.orders
Run Code Online (Sandbox Code Playgroud)

哪个去获取相关orders对象.

在JS中,我们可以使用getter轻松实现:

{
   name: "John",
   get orders() {
     // get the order stuff here
   }
}
Run Code Online (Sandbox Code Playgroud)

但是Rails是同步的,而在JS中,如果在我们的例子中,合理的话,我们将进入数据库,我们将把它做为异步.

我们如何创建异步getter(以及setter)?

我们会回复最终得到解决的承诺吗?

{
   name: "John",
   get orders() {
     // create a promise
     // pseudo-code for db and promise...
     db.find("orders",{customer:"John"},function(err,data) {
        promise.resolve(data);
     });
     return promise;
   }
}
Run Code Online (Sandbox Code Playgroud)

这将允许我们这样做

customer.orders.then(....);
Run Code Online (Sandbox Code Playgroud)

或者我们会做更多角度风格,我们会自动将其解析为值吗?

总之,我们如何实现异步吸气剂?

javascript promise

17
推荐指数
2
解决办法
8929
查看次数

window.print(); 在Safari中不起作用

使用onclick链接Safari时,print方法在窗口上不起作用.通过放置在按钮上的onclick代码在Safari中进行网页打印的替代方法是什么?发生的另一个奇怪的行为是当我尝试关闭窗口时,然后会出现浏览器原生的打印对话框.

javascript safari

13
推荐指数
1
解决办法
3417
查看次数

如何在vs代码中调试Java maven spring-boot应用程序?

我能够调试一个简单的Java hello世界.第一步是"编译" javac -g.我查看了如何用maven完成同样的操作并找到http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html,但这些说明用于运行应用程序并等待调试器连接.

我也试着使用target/classesclasspathlaunch.json.调试器抱怨它无法在根目录中找到文件/,但它会运行.虽然调试器正在运行,但应用程序没有响应HTTP请求.

是否有一个mvn命令来编译应用程序javac -g并生成一个.class调试器能够成功运行?

java maven spring-boot visual-studio-code

9
推荐指数
2
解决办法
3543
查看次数

event.clipboardData.getData在Safari中没有text/html

在我们的应用程序中,我们处理粘贴的内容,然后将其插入到可信的div中.在Firefox和Chrome中,粘贴event.clipboardData.getData有两个键text/plain和text/html.在Safari中,它有大约12个键,范围从文本到RTF,但不包括用户粘贴在其中任何一个中的HTML.如何从粘贴事件中访问它?

$( 'div' ).on( 'paste', function( aEvent ) {
    var evt = aEvent.originalEvent;
    var text = evt.clipboardData.getData( 'text/plain' );
    var html = evt.clipboardData.getData( 'text/html' );
    var i, len;

    console.log( 'text=' + text );
    console.log( 'html=' + html );

    console.log( 'data types=' );
    console.log( evt.clipboardData.types );

    for ( i = 0, len = evt.clipboardData.types.length; i < len; i++ ) {
        console.log( evt.clipboardData.types[ i ] + '=' + evt.clipboardData.getData( evt.clipboardData.types[ i ] ) );
    }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/njLxk9cw/

突出显示两个段落,复制它们,然后粘贴到新行并观察控制台.

[编辑]如果我从复制事件中使用Rangy的range.toHtml,我可以保存所选内容的快照.在粘贴事件中,我首先检查剪贴板,然后检查我保存的片段,然后回退到文本.理想情况下,我希望尽可能让剪贴板API工作.

javascript safari

6
推荐指数
0
解决办法
2181
查看次数

Javascript ComputedStyle:getPropertyValue()在IE中速度很慢。有解决办法吗?

我的JavaScript在网页的DOM中运行,并为每个节点获取计算出的样式:

var computedStyle =  window.getComputedStyle(element);
Run Code Online (Sandbox Code Playgroud)

然后使用它来获取大约20个值,例如:

c_style = computedStyle.getPropertyValue("height");
Run Code Online (Sandbox Code Playgroud)

事实证明,这在IE中非常缓慢(尝试IE11和IE9)。

如果我只是得到getComputedStyle样式,则页面的时间为0.3秒(脚本还执行其他操作)。

如果我添加getPropertyValue,则该页面的时间将增加到3整秒。但是,在Firefox中,脚本也在查找这些值几乎没有区别。

在IE(9+)中还有另一种方法吗?还是出了什么问题?

编辑:其他人是否有成功(=良好的性能)从IE中获得许多样式?

javascript internet-explorer-9

5
推荐指数
0
解决办法
652
查看次数

为什么 gcc 在初始化没有使用字符串 const 的数组时不发出警告?

#include <stdio.h>

void print(char *strings[]) {
  while (*strings) printf("%s\n", *strings++);
}

int main(int argc, char *argv[]) {

  char *array[] = {"Hello", "World", NULL}; // No warning?
  const char *constArray[] = {"Hello", "World", NULL};

  print(constArray); // Warning!

  //constArray[0][0] = '!'; Compile time error
  array[0][0] = '!'; // Run time error

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待收到警告,char *array[] = {"Hello", "World", NULL};因为这些字符串的字符是只读的,但编译器没有给我警告。所以基本上编译器让我在没有警告的情况下“强制转换”const char到 a char

将 a 传递const char给接收 a charin的函数时,print(constArray);换句话说,将 aconst char …

c gcc warnings casting constants

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

返回相同函数类型的通用记忆函数

我正在尝试编写一个 memoize 函数,该函数将一个函数作为参数并返回一个类似的 memoized 函数。

function memoize<T extends Function, R>(f: T): T {
  const memory = new Map<string, R>();

  const g = (...args: any[]) => {
    if (!memory.get(args.join())) { memory.set(args.join(), f(...args)); }
    return memory.get(args.join());
  };

  return g; // g as T => [ts] Type '(...args: any[]) => R' cannot be converted to type 'T'.
}

// const exp: (...args: any[]) => RegExp
const exp = memoize<(text: string) => RegExp, RegExp>((text: string) => {
  return new RegExp(text.replace(/[^a-zA-Z0-9\s]/g, ".").replace(/\s+/g, "\\s+"), "ig");
}); …
Run Code Online (Sandbox Code Playgroud)

memoization typescript

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