标签: coffeescript

CoffeeScript和OOP - 原型方法

假设我执行以下代码:

class Test
  t: ->
    "hell"
  d: ->
    console.log t()
    "no"
Run Code Online (Sandbox Code Playgroud)

它将编译为类似于:

(function() {
  this.Test = (function() {
    function Test() {}
    Test.prototype.t = function() {
      return "hell";
    };
    Test.prototype.d = function() {
      console.log(t());
      return "no";
    };
    return Test;
  })();
}).call(this);
Run Code Online (Sandbox Code Playgroud)

好的,我无法调用方法t()内部的d()方法.

为什么不?我该如何解决?

提前致谢.

javascript oop coffeescript

0
推荐指数
1
解决办法
2102
查看次数

如何从$ .getJSON(coffeescript)返回json

可能重复:
无法从jQuery Ajax调用中获取正确的返回值
如何从函数中返回AJAX调用的响应?

我有这个:

  get_json = (url) ->
    $.getJSON "#{url}.json", {}, (json, response) ->
      return json
Run Code Online (Sandbox Code Playgroud)

但这编译为:

getJson = function(url) {
  return $.getJSON("" + url + ".json", {}, function(json, response) {
    return json;
  });
};
Run Code Online (Sandbox Code Playgroud)

..并返回响应对象.我怎样才能返回json呢?

jquery coffeescript

0
推荐指数
1
解决办法
5170
查看次数

上下文与Jquery文件上传和Backbone

我遇到了jquery-file-upload和Backbone的上下文问题.在fileupload'完成'回调中,我想调用Backbone视图中定义的另一个函数,但是我丢失了上下文.

class MyBackboneView extends Backbone.view

    initialize_fileupload: ->
        $('form#my_form').fileupload
            done: (e, data) ->
                this.some_function()

    some_function: ->
        ...
Run Code Online (Sandbox Code Playgroud)

浏览器控制台中返回的错误是"未捕获的TypeError:对象#没有方法'some_function'",因为"this"不再引用Backbone视图,而是引用jquery表单元素.

有没有办法从回调中访问视图中的该函数?

javascript jquery coffeescript backbone.js jquery-file-upload

0
推荐指数
1
解决办法
578
查看次数

Jquery令牌输入中的令牌限制

这个令牌输入来自 http://loopj.com/jquery-tokeninput/
我看到http://railscasts.com/episodes/258-token-fields-revised的教程

因为我在很多地方使用它,我需要一些时间只选择一个值,而在其他地方需要多个值.它是多值选择的代码.现在我希望它只搜索一次并只提交一个值.有没有办法在我的coffescript文件中编码它只选择一个值并停止?

my code for customers.js.coffee
jQuery ->
  $('#customer_plan_tokens').tokenInput '/plans.json'
    theme: 'facebook'
    prePopulate: $('#customer_plan_tokens').data('load')

my code for _form.html.erb for cusomers is
   <div class="form-inputs-right">

            Projects: <%= f.text_field :plan_tokens, data: {load: @customer.plans}, :label => "Projects" %>
        </div>
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails railscasts coffeescript ruby-on-rails-3

0
推荐指数
1
解决办法
3957
查看次数

在CoffeeScript中?= vs || =

我试图选择一个可靠的运算符"如果变量未定义或初始化,则声明并初始化".

考虑一个例子(语义不是很重要):

window.test ?= 123

location.origin ||= location.protocol + "//" + location.host
Run Code Online (Sandbox Code Playgroud)

这被转换为以下Javascript:

var _ref;

if ((_ref = window.test) == null) {
  window.test = 123;
}

location.origin || (location.origin = location.protocol + "//" + location.host);
Run Code Online (Sandbox Code Playgroud)

哪种方法更好?在我看来,||=运算符更可靠,因为它也说明了"未定义"但是为什么CoffeeScript推广使用?=呢?我错过了什么吗?

javascript operators coffeescript

0
推荐指数
1
解决办法
1139
查看次数

coffeescript语法{var}?

很简单,我在节点中使用coffeescript看到以下语法,我从未在浏览器中看到过使用coffeescript.

  {foo} = app.locals.foo
Run Code Online (Sandbox Code Playgroud)

我前往js2coffee看看它做了什么,但它在js输出中似乎是相同的

  foo = app.locals.foo
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?{}语法在这种情况下意味着什么?你为什么要用它?

node.js coffeescript

0
推荐指数
1
解决办法
84
查看次数

为所有函数添加一行代码

所以我在JS工作很多,而且我正在做很多事情(尽量保持模块化).当前我Event.fire('eventName')在每个函数结束时调用.我正在寻找一种方法让我的对象/类中的任何函数自动调用Event.fire([function name])所有函数的末尾

例:

function MyClass(){
   this.on('someFunc', this.funcTwo);
   this.someFunc();
}
MyClass.prototype.on = function( event ){
   // the event stuff //
}
MyClass.prototype.someFunc = function(){
   console.log('someFunc');
}
MyClass.prototype.funcTwo = function(){
   console.log('funcTwo');
}
Run Code Online (Sandbox Code Playgroud)

javascript class coffeescript

0
推荐指数
1
解决办法
423
查看次数

Coffeescript意外终止错误

我在/assets/javascripts/leads.js.coffee中有这个

jQuery ->
  getRowColour = (status) ->
    switch status
    when "rejected" then return '#FFA500'
    when "confirmed" then return '#C0C0C0'
    when "didn't connect" then return '#90EE90'
    else return '#FFFFFF'
Run Code Online (Sandbox Code Playgroud)

这在我的/views/leads/index.html.erb中

<%= f.select(:status, ["to call","didn't connect","confirmed","rejected"], {:selected => lead.status}, :onchange => "$('#lead_form_#{lead.id}').submit();document.getElementById('lead_row_#{lead.id}').style.backgroundColor=getRowColour(#{lead.status});") %>
        <% end %> 
Run Code Online (Sandbox Code Playgroud)

可以看出,f.select中的onchange函数有一个javascript,它调用我的coffeescript文件中的函数.

请告诉我哪里出错了?

ruby-on-rails coffeescript ruby-on-rails-3

0
推荐指数
1
解决办法
5773
查看次数

具有相对目标的动态文件映射

这是关于使用Grunt.js进行动态文件映射的一般性问题,但出于示例目的,我将尝试在具有动态结构的项目中构建咖啡文件:

结构体

在这里,我可以拥有多个(动态)目标文件夹,其深度不同.查找咖啡文件仍然很容易,**/coffee/*.coffee随时都可以匹配.

我想要实现的目标是使dest属性对于匹配的咖啡文件:

  • **/coffee/*.coffee
  • 编译到 ../js/*.js

而不是使它相对于项目文件夹(Gruntfile).

coffee: {
    compile: {
        files: [
            {
              expand: true,
              src: ['**/coffee/*.coffee'],
              dest: '../js/', // This won't work ! But I wish it could :)
              ext: '.js'
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

你会如何实现这一目标?

javascript coffeescript gruntjs

0
推荐指数
1
解决办法
2203
查看次数

从coffeescript课程中发出事件

我想从coffeescript类中发出事件,类似于Backbone.View的做法.

class Countdown extends Backbone.View
countdown = new Countdown
countdown.on "complete", ->
    something()
Run Code Online (Sandbox Code Playgroud)

所以没有backbone.js,例如:

class Countdown extends SomeEmitter
countdown = new Countdown
countdown.start()
countdown.on "complete", ->
    something()
Run Code Online (Sandbox Code Playgroud)

Atm我有这样的事情:

class SomeEmitter
    events: $({})
#So I need to countdown.events.on "complete"
Run Code Online (Sandbox Code Playgroud)

但是这可能会以某种方式重构,所以我从倒计时实例而不是countdown.events发出事件.我不在我的项目中使用backbone.js,因此仅仅为Backbone.Events部分包含它是愚蠢的.我认为应该可以以某种方式扩展$({}),或jquery中可用的其他东西(jQuery.Event?)

更新:

我想我会做一些事情:

class SomeEmitter
    constructor: ->
        @events = ${{})
    on: (eventName, cb) =>
        @events.on eventName, cb
    trigger: (eventName) =>
        @events.trigger eventName
Run Code Online (Sandbox Code Playgroud)

我不使用Backbone.Events(或查看代码和复制片段)的原因是因为我有一个完全工作的触发器和方法的jQuery.所以应该可以扩展它,而不是编写我自己的发射器.

javascript jquery coffeescript

0
推荐指数
1
解决办法
2151
查看次数