0
如果我把一個模板從JavaScript和:發送編譯對象Closure模板
namespace.template(record);
其中record
是一個實例:
/** @typedef {{var: string}} */
我用的是谷歌關閉編譯器在高級模式下,其中重寫var
,那麼我怎樣才能在模板中接收var
?是使用'var'
而不是var
來防止重寫唯一的方法來做到這一點?我想,如果我可以爲模板的@param
提供類型,就像我可以爲JavaScript代碼一樣,它應該讓編譯器知道要使用的重寫名稱...
看起來這不會發生任何值var
。它確實發生,雖然如果密鑰名爲default
,因爲SoyToJsSrcCompiler使用'default'
(僅針對這個特殊名稱,而不是針對我迄今爲止使用的任何其他名稱)生成代碼,因此阻止Closure編譯器重命名它,但該屬性在JavaScript代碼,因爲我使用的是default
而沒有引號。
確實,這似乎工作(正如我所預期的那樣)。但現在我明白了問題的真正原因。如果一個屬性被命名爲'default',那麼由SoyToJsSrcCompiler生成的代碼將其寫爲'['default']',但該屬性被Closure Compiler在原始對象中重命名......可能發生這種情況是因爲'default'是一個保留字,我猜大豆編譯器害怕破壞語法,如果它沒有引用它(即使'rec.default'是完全有效的語法)......我可以用一種方式解決這個問題不涉及重命名我的財產? – rid
只有在原始模板中使用類似'{$ rec ['var']}''的語法時纔會出現您所描述的內容。在這種情況下,您需要像'namespace.foo({rec:{'var':val}})''一樣調用您的模板以避免您當前看到的混合屬性訪問問題。 –
該模板包含類似於'{$ rec.foo.default.bar}'的東西,它生成代碼'opt_data.rec.foo ['default']。bar'。它似乎只使用名稱「default」的引號,但不用於其他任何內容。 – rid