0

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

我正在实施支付提供商配置,它需要为不同的支付提供商提供一组不同的选项。

这是我现在在我的视图代码中的内容:

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())

但我不知道如何正确编写它。

更新

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

4

1 回答 1

0

你的 CoffeeScript 语法对我来说似乎很好。

您的第一个(工作)示例和其他两个示例之间的区别在于,在第一个代码示例中,JST在评估您的类时访问对象,而在后两个示例中,仅在呈现视图时才访问该对象。

JST 对象的状态是否在两者之间发生了变化,从而模板在渲染时不再存在?

于 2012-12-18T15:58:54.513 回答