Backbone View中渲染方法的参数

时间:2012-06-20 02:39:15

标签: ruby-on-rails backbone.js coffeescript jasmine backbone-views

我正在使用这个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"

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

2 个答案:

答案 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

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

答案 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