0

我正在尝试编写一个 indexeddb 函数“删除”。它在 JS 中应该是这样的:

var transaction = db.transaction('objectStore','readwrite');
var objectStore = transaction.objectStore('objectStore');
objectStore.delete(id);

但是,当我用 CS 编写它时:

transaction = db.transaction 'objectStore','readWrite'
objectStore = transaction.objectStore 'objectStore'
objectStore.delete(id)

当然它输出:

...
objectStore["delete"](id);

我没有为 IDBTransaction 编写一个名为“delete”的方法,但我必须使用它。如何防止 CS 转义“删除”方法并将其变成对象中的“删除”键?

4

2 回答 2

3

你为什么关心 JavaScript 版本是objectStore["delete"](id)什么?这与objectStore.delete(id).

例如,如果你在 CoffeeScript 中这样说:

class B
    m: (x) -> console.log("B.m(#{x})")
class C extends B

c = new C
c.m('a')
c['m']('b')

最后两行作为这个 JavaScript 出现:

c.m('a');
c['m']('b');

但他们都调用相同的方法。

演示:http: //jsfiddle.net/ambiguous/XvNzB/

同样,如果你在 JavaScript 中这样说:

var o = {
    m: function(x) { console.log('m', x) }
};
o.m('a');
o['m']('b');

最后两行调用相同的方法。

演示:http: //jsfiddle.net/ambiguous/Y3eUW/

于 2013-08-02T19:38:09.547 回答
3

使用反引号通过裸 Javascript:

`objectStore.delete(id)`

将逐字汇编。在我最喜欢的网站上尝试一下,在 CS 和 JS 之间进行解释:http: //js2coffee.org/#coffee2js

transaction = db.transaction 'objectStore','readWrite'
objectStore = transaction.objectStore 'objectStore'
`objectStore.delete(id)`

变成

var objectStore, transaction;

transaction = db.transaction('objectStore', 'readWrite');

objectStore = transaction.objectStore('objectStore');

objectStore.delete(id);
于 2013-08-02T19:04:52.077 回答