0

我正在使用这个咖啡脚本代码:

在规范文件中:

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"

这里会发生什么?,如何将参数传递给渲染方法?

4

2 回答 2

1

你只是被一个 asynchronous 愚弄了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

演示:http: //jsfiddle.net/ambiguous/EZc7N/

于 2012-06-20T03:35:31.790 回答
0

我无法重现此问题。这按预期工作

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 字符串化以避免两次记录同一对象(由于对象相同,调试控制台将打印相同的值(其当前状态))。

此外,您可能对使用下划线default填充默认参数感兴趣:

render = (options = {}) ->
  _.defaults options, writeTo: 'body', enhanceUI: true
于 2012-06-20T03:32:12.360 回答