我已经写了一段时间javascript,最近一直在玩coffeescript.我注意到coffeescript以下列方式编译函数:
(function() {
}).call()
Run Code Online (Sandbox Code Playgroud)
我也注意到人们用这种方式写函数:
(function() {
})()
Run Code Online (Sandbox Code Playgroud)
据我所知,这些是自称的匿名函数.首先,拥有.call()和仅仅()是.call()一种更具语义的写作方式之间的区别是什么().
另外,为什么coffeescript将整个文件包装在匿名函数中,而通常不需要?这有什么表现或其他优势吗?应该何时使用这些自调用函数?
谢谢
根据/sf/answers/333835561/,我应该能够从.js文件中获取.coffee文件:
$ echo 'console.log "works"' > module.coffee
$ echo '
> require("coffee-script")
> require("./module")
> ' > test.js
$ node test.js
works
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我在运行test.js时收到此消息:
module.js:340
throw err;
^
Error: Cannot find module './module'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/Users/jose/Desktop/pedo/test.js:2:1)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:902:3
Run Code Online (Sandbox Code Playgroud)
我正在使用NVM安装Node 0.10.25.还使用使用NPM 1.3.24安装的CoffeeScript 1.7.1.
有没有从js/coffee控制台导入库的快捷方法?现在,每次我需要使用库时,我都会注入一个脚本元素,将cdn链接到我的DOM,如下所示:
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
Run Code Online (Sandbox Code Playgroud)
这真是一种痛苦.必须有一些方法可以在本地存储常用的库,然后允许我的控制台使用requirejs或其他东西将它们导入一行(而不记住cdn url).我是一个蟒蛇人,我已经习惯于在我的PATH中插入任何已安装的模块.我希望能够以类似的方式玩js - 这就是我学得最好的方式.
views.js
controllers = require '../../modules/fixture/controllers.js'
exports.custom = (db) ->
(req, res) ->
controllers.custom req.body
, (result) ->
res.json result : result
, (error) ->
res.json 400, error : error
Run Code Online (Sandbox Code Playgroud)
test.js
mockery = require "mockery"
exports.tests = (app, db, config) ->
describe '#routes', ->
describe '/fixture/custom', ->
it 'should return status 400 if no request body was provided', (done) ->
request app
.post '/fixture/custom'
.send
body :
players : []
.expect 400, done
describe '#views', ->
describe '#custom', ->
controller = …Run Code Online (Sandbox Code Playgroud) 我目前遇到的一个问题是,当我开始时似乎并不难为我解决,但我现在卡住了几个小时,所以我们走了:
给定这个对象数组:
groups = [
{
name: 'Custard apple',
slug: 'custard-apple',
children: [
{
name: 'Vanilla',
slug: 'vanilla',
children: [
{
name: 'Strawberry',
slug: 'strawberry',
children: []
}, {
name: 'Pineapple',
slug: 'pineapple',
children: []
}
]
}, {
name: 'Chocolate',
slug: 'chocolate',
children: []
}
]
}, {
name: 'Raspberry',
slug: 'raspberry',
children: []
}, {
name: 'Lemon',
slug: 'lemon',
children: [
{
name: 'Orange',
slug: 'orange',
children: [
{
name: 'Coconut',
slug: 'coconut',
children: []
}
]
}, …Run Code Online (Sandbox Code Playgroud) 我无法将其从Jquery/Javascript转换为coffeescript,因为我是一名初学者而且我发现很难掌握.有人可以帮我一把吗?
$.each(data, function (index) {
arrayOfThings.push(data[index].thing);
});
Run Code Online (Sandbox Code Playgroud)
这是一个接收AJAX'GET'数据的函数.
阅读优秀的CoffeeScript Ristretto,我遇到了这个功能:
((x) ->
(y) ->
x
)(1)(2)
Run Code Online (Sandbox Code Playgroud)
我的理解是结果x与输入相同x.
Haskell版本(*)看起来像这样吗?
foo :: a -> b -> (a -> b) -> a
foo x y f = x
Run Code Online (Sandbox Code Playgroud)
*注意 - 我不知道Haskell的健壮类型系统v.CoffeeScript是否有1-1翻译
我正在使用Jquery令牌输入版本1.6.0.我希望能够在令牌输入中输入自定义条目,但每次我这样做时表单都会提交(我输入一个自定义单词并点击回车).这是我的代码(在coffeescript中):
jQuery ->
$('[id$=tag_list_tokens]').each ->
el = $(this)
el.tokenInput '/listings/tags.json',
theme: 'facebook'
minChars: 1
allowCustomEntry: true
preventDuplicates: true
prePopulate: el.data('load')
allowFreeTagging: false
Run Code Online (Sandbox Code Playgroud)
一切正常,除了自定义条目......任何想法我做错了什么?
在CoffeeScript中使用块正则表达式时,会删除空格.所以,除非我使用\s,否则我无法匹配空格,但这也匹配新的行,制表符等.
所以在JavaScript中(因为除了块正则表达式之外,CoffeeScript正则表达式与JavaScript相同),有没有一种方法可以匹配ONLY空格而不使用空格本身?
在一个组件中,我有一个返回主屏幕的按钮.当我点击它时sendAction似乎没有开火.我希望它将动作发送到路线动作:
routes.js.coffee:
App.AutomobileRoute = Ember.Route.extend(Ember.SimpleAuth.AuthenticatedRouteMixin,
model: (params) ->
@store.find('automobile', params.automobile_id)
setupController: (controller, model) ->
controller.set('content', model)
@controllerFor('application').set('currentRoute', 'automobiles')
actions:
back: ->
@transitionTo 'automobiles'
)
Run Code Online (Sandbox Code Playgroud)
零件:
backToAutomobiles: ->
console.log 'Hit Back'
response = @.sendAction 'back'
console.log "Response: " + response
Run Code Online (Sandbox Code Playgroud)
模板:
<button type="button" class="btn btn-default" id='back' {{action 'backToAutomobiles' model}}>Back</button>
Run Code Online (Sandbox Code Playgroud)
我接到'点击'消息,但页面没有改变.说实话,这可能是这个问题的重复,我只是不能很好地回答这个问题.
完整模板:
<div class="panel-group" id="automobile-details">
<div class="panel panel-default">
<div class="panel-heading">
<span class="spec-title">
<h3 class="panel-title">
<a data-toggle="collapse" data-parent="#automobile-details" href="#automobile-details-body">
{{model.name}}
</a>
</h3>
</span>
<span>
{{view Em.Select …Run Code Online (Sandbox Code Playgroud)