SessionStorage в магистрали не работает до обновления страницы

Я сейчас работаю над магистральным приложением, и у меня проблема со значениями 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>
    <% } %>

Есть ли у вас какие-либо идеи? Я часами чесал голову и теперь прошу вашей помощи!

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 );
   }
});

// Наш модуль теперь возвращает наше представление return ProjectListView; });

Другие вопросы по тегам