CoffeeScript中的方法调用语法

mpo*_*z08 6 javascript syntax coffeescript backbone.js

我是CoffeeScript的新手,我似乎在调用方法的语法方面遇到了麻烦.

这是卡片型号:

class exports.Card extends Backbone.Model
  defaults:
    pip:   '4'
    suit:  '?'
    color: 'b'

  rows: ->
    rows =
      '4': [2, 0, 2]
    rows[@pip]
Run Code Online (Sandbox Code Playgroud)

以及模板的相关部分:

<ul class="col cols-<%= @card.rows()[0] %>">
Run Code Online (Sandbox Code Playgroud)

这给了我错误 Uncaught TypeError: Object #<Object> has no method 'rows'

具体来说,我想知道我是否使用了Card的rows方法的错误语法,或者我只是误解了一些东西.提前致谢!

更新:

出于某种原因,@card.property总是很好,但@card.any_method()从来没有.我现在通过使用属性来解决这个问题,但如果有人能够解释这种行为,我会很喜欢它.再次感谢!

更新2:

我正在使用http://brunchwithcoffee.com,如果它对任何人都有帮助,这里的main.coffee文件显示@card实例是如何创建并传递给视图的.

window.app = {}
app.routers = {}
app.models = {}
app.collections = {}
app.views = {}

Card = require('models/card_model').Card
MainRouter = require('routers/main_router').MainRouter
HomeView = require('views/home_view').HomeView
CardView = require('views/card_view').CardView

# app bootstrapping on document ready
$(document).ready ->
  app.initialize = ->
    app.routers.main = new MainRouter()
    app.views.home = new HomeView()
    app.views.card = new CardView(model: new Card(color: 'r', suit: '?', pip: '7'))
    app.routers.main.navigate 'home', true if Backbone.history.getFragment() is ''
  app.initialize()
  Backbone.history.start()
Run Code Online (Sandbox Code Playgroud)

lia*_*nan 14

调用语法的方法是正确的.CoffeeScript的相关规则是:

要查看其工作原理,请尝试在CoffeeScript网站上的"Try CoffeeScript"编辑器上运行以下代码:

class A
  method: ->
    console.log "A"

(new A()).method();
Run Code Online (Sandbox Code Playgroud)

由于您的方法调用语法是正确的,因此问题似乎是@card变量不是exports.Card类的实例.