我可以将全局变量传递给下划线视图吗?

时间:2014-10-15 14:27:09

标签: backbone.js

我想知道在渲染模板时是否可以传递全局变量。基本上每次调用控制器时都会得到这个变量,所以看起来像这样:

 window.myVar = 0;
 //this var will change in a given moment when I make a request to the server.. so:

 //into the render method of my view, I have something like this:
 var template = _.template($("#myTemplate").html(), { varIwantToPass : myVar } );
 this.$el.html(template);

这样我可以通过以下方式访问模板:

 <%= varIwantToPass.get('myVar') %>

如果可能的话?而且,每次渲染视图时,此代码将再次执行并更新值?

1 个答案:

答案 0 :(得分:1)

是的,除了模板必须是

<%= varIwantToPass %>

并将变量作为window.myVar传递,因此您不会意外地将其替换为

是的,如果每次都传递变量,它将在每次渲染后更新

工作示例:

HTML:

<script id="myTemplate" type="text/html">
    <%= varIwantToPass%>
</script>

<div></div>

JS:

window.myVar = 'a';
var templateHtml = $("#myTemplate").html()
var render = function () { 
    var template = _.template(templateHtml, { varIwantToPass : window.myVar } );
    return template;
}

$('div').html(render());

window.myVar = 'b'; //change variable
setTimeout(function() {
    $('div').html(render());
}, 1000)

http://jsfiddle.net/omynhL1d/

但是我会提倡不使用全局变量,而是将其保存在骨干视图中的某个位置,甚至更好地保存模型,然后通过监听模型更改事件进行渲染