我正在构建一个在POST请求中发送的JSON对象.此对象具有在发送之前需要从字符串类型转换为整数类型的属性.如何用coffeescript做到这一点?
这有效:
myfunc = () ->
id: 3
name: 'myname'
Run Code Online (Sandbox Code Playgroud)
但我想明确回归对象.
myfunc = () ->
return
id: 3
name: 'myname'
Run Code Online (Sandbox Code Playgroud)
但是我得到了"意外的'INDENT'"错误.上面的代码有什么问题?
有没有办法从coffeescript的理解中返回一个对象?这样的东西,我可以表达这个:
form_values = () ->
ret = {}
ret[f.name] = f.value for f in $('input, textarea, select')
return ret
Run Code Online (Sandbox Code Playgroud)
像这样:
form_values = () -> f.name, f.value for f in $('input, textarea, select')
Run Code Online (Sandbox Code Playgroud)
我想构造一个对象(不是一个对象数组).所以如果标记看起来像这样:
<form name=blah>
<input type=text name=blah1 value=111 />
<textarea name=blah2>222</textarea>
<select name=blah3>
<option value=333a>
<option value=333b>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
返回的对象将是这样的:
{
blah1: '111',
blah2: '222',
blah3: ''
}
Run Code Online (Sandbox Code Playgroud) Makefile - 内容:
REPORTER = dot
all: build
build:
@./node_modules/coffee-script/bin/coffee \
-c \
-o lib src
clean:
rm -rf lib
mkdir lib
watch:
@./node_modules/coffee-script/bin/coffee \
-o lib \
-cw src
test:
@./node_modules/mocha/bin/mocha \
--reporter $(REPORTER) \
test/*.coffee
.PHONY: build clean watch test
Run Code Online (Sandbox Code Playgroud)
项目根目录有一个包含两个文件的测试文件夹:mocha.opts和example.coffee
example.coffee - 内容
describe "feature", ->
it "should add two numbers", ->
(2+2).should.equal 4
Run Code Online (Sandbox Code Playgroud)
运行时make test,出现以下错误:
cribe 'feature',
^^^^^^^^^
node.js:201
throw e; // process.nextTick error, or 'error' event on first tick
^
SyntaxError: Unexpected string …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Sublime Text 3中设置CoffeeScript构建系统,但我一直收到以下错误:
env: node: No such file or directory
[Finished in 0.0s with exit code 127]
[cmd: ['coffee', '-o','/Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/script', '-cw', '/Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/coffee']]
[dir: /Users/jcourtdemone/Sites/autotempest.com/new_design_sandbox/static/coffee]
[path: /usr/bin:/bin:/usr/sbin:/sbin]
Run Code Online (Sandbox Code Playgroud)
我的构建系统看起来像这样:
{
"name": "Coffee - AT",
"cmd": ["coffee","-o","${project_path:${folder}}/static/script","-cw","${project_path:${folder}}/static/coffee"],
"selector": "source.coffee",
"path":"/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/lib/node_modules/coffee-script/bin"
}
Run Code Online (Sandbox Code Playgroud)
有两件事情很奇怪.
1)它说它正在查找存在/usr/bin符号链接的位置coffee.
2)由于(1),我推翻$PATH,包括实际位置coffee是/usr/local/lib/node_modules/coffee-script/bin,但出于某种原因,$PATH没有被覆盖得当,它与默认的坚持$PATH.
注意事项:
i)我已经验证所有路径都是正确的,并通过常规终端命令正常传递.
ii)尝试使用"shell": true构建系统中的变量.
iii)我有另一个Compass这样的构建系统,工作正常.
有人遇到类似的问题或问题吗?有任何想法吗?
例如:

所以:
foo = "asdf"
{foo: "bar"}
eval foo
# how do I get {"asdf": "bar"} ?
# this will throw parse error:
{(eval foo): "bar"}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的语法问题:如何让CoffeeScript动态构造哈希,而不是手工完成?
ECMAScript允许我们定义getter或setter如下:
[文本/ JavaScript的]
var object = {
property: 7,
get getable() { return this.property + 1; },
set setable(x) { this.property = x / 2; }
};
Run Code Online (Sandbox Code Playgroud)
如果我正在使用课程,我可以解决:
[文本/ CoffeeScript的]
"use strict"
Function::trigger = (prop, getter, setter) ->
Object.defineProperty @::,
get: getter
set: setter
class Class
property: ''
@trigger 'getable', ->
'x'
member: 0
Run Code Online (Sandbox Code Playgroud)
但是,如果我想要什么定义上触发直接对象 - 不使用defineProperty/ - ies.我想做一些事情(它不是那样工作):
[文本/ X-伪的CoffeeScript]
object =
property: 'xhr'
get getable: 'x'
Run Code Online (Sandbox Code Playgroud)
它在JavaScript中运行没有任何问题,我不希望我的脚本在使用CoffeeScript时回退.难道没有办法像JavaScript/ECMAScript …
我是Grunt的新手,到目前为止,我非常喜欢它.我希望Grunt在运行时只编译已更改的文件grunt watch
在我的Grunfile.coffee中,我目前有(相关部分).
注意:assets/javascript/app.coffee和assets/javascript/app.js是目录
coffee:
default:
expand: true
cwd: "assets/javascript/app.coffee"
src: ["*.coffee"]
dest: "assets/javascript/app.js"
ext: ".js"
uglify:
dev:
options:
beautify: true
compress: false
mangle: false
preserveComments: 'all'
files:
"js/app.js": "assets/javascript/app.js/*.js"
"js/libs.js": "assets/javascript/libs/*.js"
watch:
coffeescript:
files: 'assets/javascript/**/*.coffee'
tasks: ["coffee"]
javascript:
files: "assets/**/*.js"
tasks: ["uglify:dev"]
livereload:
files: ["Gruntfile.coffee", "js/*.js", "*.php", "css/*.css", "images/**/*.{png,jpg,jpeg,gif,webp,svg}", "js/*.js", ]
options:
livereload: true
Run Code Online (Sandbox Code Playgroud)
可能有一个较短的方法,但我首先将app.coffee编译为app.js,这样在我分发我的作品后,对Coffeescript不熟悉的人可以以合理的方式浏览代码.
所有这一切的问题是,现在我保存了一个Coffeescript文件,我得到了太多步骤(我认为):
>> File "assets/javascript/app.coffee/browse.coffee" changed.
Running "coffee:default" (coffee) task
File assets/javascript/app.js/browse.js created.
File assets/javascript/app.js/filters.js created.
Done, without errors.
Completed in 0.837s at Tue …Run Code Online (Sandbox Code Playgroud) 在Rails 3.1中,无法使用诸如<%= @ foo%>之类的语法访问资产js.erb或coffee.erb文件中的控制器实例变量,其中@foo在控制器中设置.那么问题是将控制器变量传递给CoffeeScript或JavaScript资产的最佳方法是什么.
这个问题在论坛上有多种复杂形式的问题,但我再次提出这个问题的意思是要有一个所有建议聚集在一起的地方,并且所提供的代码简单易读.另请注意,我特指的是资产,而不是查看响应文件.
controller ruby-on-rails erb instance-variables coffeescript
编辑2016年11月:Node现在有一个内置的调试器,您可以从中开始--inspect.这个答案解释了它:https://stackoverflow.com/a/39901169/30946.
我正在用coffeescript建立一个摩卡测试.在测试的顶部,我有:
require "../assets/js/theObject.coffee"
debugger
ss = new TheObject()
Run Code Online (Sandbox Code Playgroud)
我想停止在调试器行上,因为theObject.coffee没有加载对象.我正在使用节点检查器,它可以工作,sorta.
我的过程是:
mocha --compilers coffee:coffee-script ./test/theObjectTests.coffee --ui bdd -d --debug-brktheObject.coffee加载,然后在正确的行上放置一个断点必须有一个更简单的方法.看起来我应该能够运行一个调试器并让它停在那个调试器行上,但我无法找到它.
我有WebStorm,它有一个调试器(本文讨论设置它来运行mocha测试,但它没有帮助我),但是当我启动它时,它失败了.在WebStorm调试窗口中运行的命令是:
"C:\Program Files\nodejs\node.exe" --debug-brk=64232 C:\Users\jcollum\AppData\Roaming\npm\_mocha
C:\Users\jcollum\AppData\Roaming\npm\_mocha:2
basedir=`dirname "$0"`
Run Code Online (Sandbox Code Playgroud)
我怀疑这可能是一个特定于Windows的问题.
环境:Windows 7,Webstorm,节点0.8.16,mocha 1.7.4,git-bash
问题是:如果你是从头开始使用Mocha,那么调试器的最简单方法是什么才能轻松地停在调试器线上?这里的关键字很简单.
编辑:自从问这个我已经停止使用Windows并在Ubuntu工作.我的mocha调试过程(我不经常使用)是一样的.
coffeescript ×10
mocha.js ×2
node.js ×2
controller ×1
debugging ×1
ecmascript-5 ×1
erb ×1
gruntjs ×1
hashmap ×1
javascript ×1
literals ×1
oop ×1
sublimetext ×1
sublimetext3 ×1
unit-testing ×1