访问jsrender模板中的全局javascript变量并更新它

时间:2012-09-11 18:24:19

标签: javascript jsrender

我正在尝试使用jsrender模板中的值更新全局javascript变量。我怎样才能实现它......

我创造了一个小提琴http://jsfiddle.net/4RH7n/8/

我需要将最后一个电影名称放入该javascript变量..

2 个答案:

答案 0 :(得分:7)

可以轻松注册自定义标记和帮助程序以访问或修改全局变量。有一个示例here(代码为here),它显示了两种方式,并说明了在模板中设置和获取全局变量。帮助者/自定义标记比使用{{* ...}}更好(因为这样您可以更好地分离代码和标记) - 但如果您使用{{*语法,则必须设置allowCode=true。 (见this example)。

上述方法是使用您自己的扩展程序来访问任何全局的方法。但是,对于大多数情况,您可能只需要访问某些特定的全局变量。在这种情况下,在.render()调用(或.link()调用,如果您使用JsViews)中传递全局(s)作为选项非常容易,如下所示:

...render(myData, { foo: myFooGlobal, bar: myBarGlobal });

然后在模板中的任何表达式中访问它们,例如:

... {{:~foo}} ... {{for ~bar}} ... {{/for}} ...

如果您希望能够从所有模板中访问这些全局变量(或者对所有对特定模板的调用),您可以将它们注册为全局(或特定于模板)的助手/模板参数,然后你就不要需要通过render / link调用传递它们。

例如,要为所有模板全局注册它们:

$.views.helpers({
    foo: myFooGlobal,
    bar: myBarGlobal 
});

然后,您可以使用~foo(或foo()作为函数)以与上述完全相同的方式访问它们。

您可以在GitHub上找到所有这些方法的示例。

<小时/> 的更新:

除了上面引用的文档和示例之外,http://www.jsviews.com还有更多近期文档和示例,特别是herehere

答案 1 :(得分:0)

不确定你在问什么..数据不会来自模板,你已经拥有该对象中的数据。直接使用它:

window.abcfx = function() {
  alert(movies[movies.length-1].name);
}

fiddle