我是CoffeeScript的新手,我似乎在调用方法的语法方面遇到了麻烦.
这是卡片型号:
class exports.Card extends Backbone.Model
defaults:
pip: '4'
suit: '♠'
color: 'b'
rows: ->
rows =
'4': [2,2]
rows[@pip]
以及模板的相关部分:
<ul class="col cols-<%= @card.rows()[0] %>">
这给了我错误Uncaught TypeError:Object#< Object>没有方法’行’
具体来说,我想知道我是否使用了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()
解决方法
调用语法的方法是正确的. CoffeeScript的相关规则是:
>对于使用参数调用的方法调用,括号是可选的
object.method 1,2
要么
object.method(1,2)
>没有参数调用的方法调用需要括号,即
object.method()
要查看其工作原理,请尝试在CoffeeScript网站上的“Try CoffeeScript”编辑器上运行以下代码:
class A
method: ->
console.log "A"
(new A()).method();
由于您的方法调用语法是正确的,因此问题似乎是@card变量不是exports.Card类的实例.