【问题标题】:Parameters for render method in Backbone View主干视图中渲染方法的参数
【发布时间】:2012-06-22 03:36:29
【问题描述】:

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

在规范文件中:

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"

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

【问题讨论】:

  • 请注意options[key] ||= val。如果您通过enhanceUI: false,它将被覆盖为true。如果你不想这样,你可以把它改成options[key] ?= val :)

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


【解决方案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/

【讨论】:

  • 我不确定这是不是正在发生的事情。由于其异步行为,他不应该在控制台中获得enhanceUI: true, writeTo: '.sandbox' 吗?
  • @epidemian:这很好。它闻起来像异步问题,也许代码与实际所做的不匹配。有什么想法吗?
  • 不,但是您的答案已被接受,这可能是console.log 问题:) (可能代码比我们在这里看到的更多,options 对象后来被修改了?) .
【解决方案2】:

我无法重现此问题。这个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

【讨论】:

    猜你喜欢
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多