我正在尝试编写一个indexeddb函数“delete”。它应该在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逃避“删除”方法并将其转换为对象中的“删除”键?
答案 0 :(得分: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);
答案 1 :(得分: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');
最后两行调用相同的方法。