0

我使用這個代碼的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" 

what coul這裏會發生什麼?我怎樣才能傳遞參數來渲染方法?

+1

意識到這一點'選項[關鍵] || = val'。如果你傳遞'enhanceUI:false',它將被重寫爲'true'。如果你不想這樣做,你可以把它改成'options [key]?= val' :) – epidemian

回答

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/

+0

我不確定這是怎麼回事。由於其異步行爲,他不應該在控制檯中獲得'enhanceUI:true,writeTo:'.sandbox''嗎? – epidemian

+0

@epidemian:這是一個很好的觀點。它聞起來像異步問題,也許代碼與真正做的不匹配。任何想法,它可能是什麼? –

+0

不是,但是當你的答案被接受時,它可能是一個'console.log'問題:)(也許有更多的代碼比我們在這裏看到的和'options'對象稍後被修改?)。 – epidemian

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字符串化,以避免登錄同一個對象兩次(作爲對象是一樣的,調試控制檯會打印相同的值(當前狀態))。

此外,您maight感興趣的Underscore's default填寫默認參數:

render = (options = {}) -> 
    _.defaults options, writeTo: 'body', enhanceUI: true