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"

ここで何が起こっている可能性がありますか?、renderメソッドにパラメーターを渡すにはどうすればよいですか?

4

2 に答える 2

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/

于 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}

同じオブジェクトを2回ログに記録しないように、オブジェクトのJSON文字列化をログに記録していることに注意してください(オブジェクトは同じであるため、デバッグコンソールは同じ値(現在の状態)を出力します)。

また、デフォルトの引数を埋めるためにアンダースコアdefaultに興味があるかもしれません:

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