我现在正在开发骨干应用程序,我认为我遇到了sessionStorage值的问题。如果您认为还有其他错误,请告诉我!
当我运行此脚本时:
<script>
console.log((sessionStorage.appRole == "1" || sessionStorage.appRole == "2"));
</script>
然后控制台中的结果是真的。
但是当使用下划线将值用于我的主干中的模板时,IF语句中的值会被渲染。但是,当我刷新页面时,按钮可见。我想知道为什么我第一次访问该页面时它没有工作。值是正确的但它没有被渲染。
<% if (sessionStorage.appRole == "1" || sessionStorage.appRole == "2") { %>
<button id="create" class="btn btn-primary"><%= i18n.create_user %></button>
<% } %>
你有什么想法吗?我已经抓了几个小时,现在我求求你的帮助!
答案 0 :(得分:1)
您应该获取值并将其存储到变量中,然后将其传递给模板。 由于模板正在寻找一个值在该变量中,因此它失败了。
var appRole = sessionStorage.appRole;
var user = i18n.create_user;
将appRole,用户值传递给模板
$(this.el).html(this.myTemplate({"appRole": appRole,"userDetail":user }));
内部模板获取它像
<% if (appRole == "1" || appRole == "2") { %>
<button id="create" class="btn btn-primary"><%= userDetail %></button>
<% } %>
对于myTemplate,请在视图中包含您的模板,并使用下划线模板功能进行分配。
myTemplate : _template(sampleTemplate),
并使用this.myTemplate(mymodelobj.toJSON());你需要的地方。
查看示例视图文件
define([
'jquery',
'underscore',
'backbone',
// Using the Require.js text! plugin, we are loaded raw text
// which will be used as our views primary template
'text!templates/project/list.html'
], function($, _, Backbone, projectListTemplate){
var ProjectListView = Backbone.View.extend({
el: $('#container'),
render: function(){
// Using Underscore we can compile our template with data
var data = {};//json data
var compiledTemplate = _.template( projectListTemplate, data );
// Append our compiled template to this Views "el"
this.$el.append( compiledTemplate );
}
});
//我们的模块现在返回我们的视图 返回ProjectListView; });