我正在使用这个coffeescript代码:
在spec文件中:
index = new MeetingIndex(render: false, collection: booking.meetings)
index.render(writeTo: '.sandbox')
视图文件中的:
render: (options = {}) ->
console.log 'options'
console.log options
console.log 'options'
options[key] ||= val for key, val of writeTo: 'body', enhanceUI: true
浏览器控制台打印:
Object
enhanceUI: true
writeTo: "body"
这里可能会发生什么?,如何将参数传递给渲染方法?
答案 0 :(得分:1)
你只是被异步console.log
所迷惑。您的第一个console.log
电话只是抓取对options
的引用,但是当它尝试记录它时,您已经更新了它。试试这个:
render: (options = {}) ->
console.log 'options'
console.log _(options).clone()
console.log 'options'
options[key] ||= val for key, val of writeTo: 'body', enhanceUI: true
答案 1 :(得分:0)
我无法重现这个问题。这works as expected:
render = (options = {}) ->
console.log 'first:', JSON.stringify options
options[key] ||= val for key, val of writeTo: 'body', enhanceUI: true
console.log 'then:', JSON.stringify options
render writeTo: '.sandbox'
输出:
first: {"writeTo":".sandbox"}
then: {"writeTo":".sandbox","enhanceUI":true}
请注意,我正在记录对象的JSON字符串,以避免两次记录同一个对象(因为对象是相同的,调试控制台会打印相同的值(当前状态))。
此外,您可能会对Underscore's default
感兴趣填写默认参数:
render = (options = {}) ->
_.defaults options, writeTo: 'body', enhanceUI: true