2013-03-20 197 views
0

我想讓我的jsRender模板可選地包含一個「options」屬性,以便在不包含屬性時提供可選的回退功能;如果包含「options」屬性,則特別渲染一個元素;如果不包含「options」屬性,則顯示另一個元素。一切正常,如果通過的模型包含有問題的財產,但即使{{if typeof ~options.someOption !== 'undefined'}}給我Error: Cannot read property 'someOption' of undefined.jsRender可選模型屬性

有沒有人處理過這個?如果是這樣,你如何處理通過的模型的屬性不存在?

編輯:這個問題真的是關於如何處理模型的缺失屬性。給定一個具有屬性A和B的模型,如果屬性B在模型中缺失但在模板中被引用,那麼如何防止錯誤消息並優雅地處理它的缺失?

+0

這是更符合你想要做的,[鏈接] http://borismoore.github.com/jsviews/demos/step-by-step/01_rendering-and-linking.html) – 2013-03-20 14:23:08

+0

雖然這很酷,它更側重於jsViews和數據綁定。我的問題是渲染的核心,以及如何選擇/渲染模板。 – 2013-03-20 23:38:59

+0

您可以確保您創建了一個模型,您的模型從中繼承而來。在Backbone中,您將創建一個模型並將其設置爲默認值,然後基於此模型創建的每個新模型都保證具有所有屬性,即使您可能不提供它們。 var Model = Backbone.Model.extend({defaults:{「prop1」:「value1」,「prop2」:「value2」});然後創建一個新模型。 var model = new Model({「prop1」:「new value」});模型現在有prop1和prop2。 – Kalpers 2013-03-21 01:07:34

回答

0

您可以利用這樣一個事實,即在Javascript中不存在的事物評估爲「未定義」,這在條件語句中等同於假,並且圍繞您嘗試訪問的包含對象和屬性包裝「if」。所以,用你的榜樣,你會去喜歡

{{if options}}{{if options.someOption}}{{:options.someOption}}{{/if}}{{/if}}

如果兩個選項和someOption存在,模板將與options.SomeOption渲染。否則它什麼都不會做。