使用主干的动态JST模板选择

时间:2012-12-18 15:44:01

标签: backbone.js coffeescript jst

我有一个视图,需要不同模型的不同模板。

我实施了支付服务提供商配置,并且需要为不同的支付提供商提供不同的选项。

以下是我在视图代码中的内容:

robokassa: JST["payment_providers/robokassa"]
cash: JST["payment_providers/cash"]

render: =>
  template_name = @model.get('name')
  switch template_name
    when "robokassa" then $(@el).html(@robokassa(payment_provider: @model))
    when "cash" then $(@el).html(@cash(payment_provider: @model))        

它有效,但它很难看。

我尝试了类似的东西,但除了简单的用例外,我无法找到关于如何使用JST对象的权威手册:

render: =>
  template_name = @model.get('name')
  $(@el).html(JST["payment_providers/#{template_name}"](payment_provider: @model)

这会返回一个错误,表示它不是函数。

我想,理想情况下,解决方案看起来像

template: => 
  JST["payment_providers/#{@model.get('name')}"](payment_provider: @model)
...
render: =>
  $(@el).html(@template())

但我无法弄清楚如何正确地写它。

更新

后者确实是正确的,问题是在调用渲染时没有加载@model。

1 个答案:

答案 0 :(得分:0)

你的CoffeeScript语法似乎很好。

您的第一个(工作)示例与另外两个示例之间的区别在于,在第一个代码示例中,在计算类时访问JST对象,而在后两个示例中仅在视图为渲染。

JST对象的状态是否在两者之间发生了变化,以便在渲染时不再出现模板?