使用jsViews / jsRender将特定的转换器/模板传递给模板

时间:2013-10-08 10:21:53

标签: templates jsrender jsviews

我正在尝试仅将转换器和/或模板传递给特定模板。根据{{​​3}},您只能传入帮助,而不能传递转换器或模板。

有没有办法做到这一点,或者有人知道是否计划在将来支持这个?

注意通过$.views.templates({...})$.views.converters({...})全局传递它们实际上并不是一种选择,因为我将使用许多甚至是名称冲突的模板和转换器。

1 个答案:

答案 0 :(得分:2)

您可以使用模板声明转换器 - 它们将是模板的私有模板。见Registering templates: $.templates()。寻找"高级方案:将私有资源与模板相关联"

此外,the API for registering converters$.views.converters({...})还允许您在全局或本地注册转换器(或一组转换器),仅用于特定模板。请参阅"添加转换器作为父模板的私有资源" 。要将它们设置为模板的本地或私有,只需将模板作为converter()调用中的最后一个参数传递。

因此,这是一个模板,其中包含与模板一起声明的特殊转换器:

$.templates({
  myTemplate: {
    markup: "Use my converter {{myconv:name}}",
    converters: {
      myconv: function(val) { return myCalculatedValue; }
    }
  }
});

现在{{myconv:...}}特定于myTemplate,并且无法在其他地方使用。

现在假设我想动态替换" myconv",仍然只在myTemplate内。我可以随时使用converters() API添加/更改它:

$.views.converters(
  "myconv",
  function(val) { return myNewUpdatedCalculatedValue; },
  $.templates.myTemplate // Only override it for myTemplate, not globally...
);

以下是一些相关链接: