javascript - CoffeeScript 类 - 调用从另一个类方法调用一个类方法

标签 javascript jquery ruby-on-rails coffeescript turbolinks

我已经将 Rails 应用程序中的嵌入式 JS 重写为 CoffeeScript...而且我是 CoffeeScript 的新手...

我的方法是这些文章的组合:

我的代码:

s = undefined
class App.PhotoLike

  settings:
    modalElement: $('#myModal')
    likeButtonId: '#like'
    photo_id: $('.image_info').attr('photo_id')
    numberOfLikes: $('#likes_num')

  constructor: (@el) ->
    console.log('constructor called')
    s = @settings
    @bindUIActions()
    return this


  bindUIActions: ->
    console.log('bindUIActions called')
    $('#myModal').on 'click', '#like', -> likePhoto()
    $(document).on "page:change", -> pageChange()


  pageChange: ->
    console.log('pageChange called')
    photo = new App.Photo

  likePhoto: ->
    console.log('likePhoto called')
    url = '/photos/' + s.photo_id + '/like'
    $.get url, (data) ->
      s.numberOfLikes.html data['likes'] + ' likes'
      $(s.likeButtonId).toggleClass 'btn-success'

这是使用ajax加载的模型的一部分,一旦调用成功,我就会创建上面的类(实例):

new (App.PhotoLike)

我的问题。 模式已加载,一切看起来都很好。但是当我触发事件时:

$('#myModal').on 'click', '#like', -> likePhoto()

我得到:

photo.like.self-942fcd8….js?body=1:25 Uncaught ReferenceError: likePhoto is not defined

所以,它不知道 likePhoto 函数。我尝试过调用 this.likePhoto 和 @likePhoto,但 this 指的是触发事件的按钮元素。

那么我该怎么做呢? 欢迎其他方法。我不太确定我是否需要这些类...但我真的想要结构化代码...

最佳答案

likePhoto() 是我们的对象/类App.PhotoLike 的函数。您可以像本地函数一样调用它。

你可以这样做

bindUIActions: ->
  _this = this #this will change inside, so we have to have a reference to our object here
  console.log('bindUIActions called')
  $('#myModal').on 'click', '#like', -> _this.likePhoto()
  ...

让我知道它是否有效。

关于javascript - CoffeeScript 类 - 调用从另一个类方法调用一个类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37761420/

相关文章:

php - 使用 innerhtml 编写带有大量引号的 html

javascript - 为什么我使用 Vue.js 时搜索不起作用?

javascript - Python Selenium - 从下拉列表中滚动更新的元素内的列表中打印文本

javascript - 在 Django 上导入 JS 文件

ruby-on-rails - Rails 请求覆盖参数

ruby-on-rails - Rails Postgres 查询排除包含连接上三个记录之一的任何结果

javascript - 使用ajax将post数据从js发送到php而不进行类型转换

javascript - hammer-time.min.js 包含未定义的函数 hasTouchNone

ruby-on-rails - 了解 ruby​​ on rails gemfile 中的组

javascript - 我怎样才能让这个 JSONP 调用返回一个值?