2017-02-13 5 views
0

Я получаю 2 шаблона: один для формы и один для строка для результата. Так я и считаю. Форма отображается, но когда у меня есть строка , я получаю статический шаблон этой строки, я имею в виду, что <% = key %> не работает и форма исчезает.Использование jQuery.load для отображения шаблона в другом шаблоне

APP.FromFront = Backbone.View.extend({ 
    el: $("#content"), 
    events: { 
     "click #addLink" : "addLink", 
     "click .deleteLink" : "deleteLink" 
    }, 
    template: _.template($('#content').html()), 

    initialize: function() { 
     this.bookmarks = new APP.BookmarksCollection(); 
     this.render(); 
    }, 
    render: function() { 
     this.$el.html(this.$el.load("../../templates/form_template.html")); 
     this.bookmarks.each(function(bookmark) { 
      var bookJSON = bookmark.toJSON(); 
      **//############ this is where it's doesn't work** 
      var temp=_.template(this.$el.load("../../templates/links_template.html")); 
      $("#links").append(temp(bookJSON)); 
     },this); 
    }, 
}) 
+0

Почему у вас есть неиспользованный шаблон: _.template ($ ('# content'). Html()), '? Почему вы пытаетесь загрузить внешний файл, а не использовать его? Вы понимаете, как работает ['load'] (http://api.jquery.com/load/)? Судя по коду, например 'this. $ el.html (this. $ El.load (url))' Я так не думаю. Вы понимаете, что наш код пытается получить один и тот же шаблон снова и снова? Хотя браузер может кэшировать его, это не очень хорошая практика. ['load'] (http://api.jquery.com/load/) является асинхронным. Сначала прочтите документацию. –

+0

Спасибо за ответ. Я использовал шаблон «шаблон», когда мой шаблон находился на странице index.html. Он не используется в этом коде. Я действительно не хочу загружать его, но использовать его. Я знаю, как это сделать, если оно находится в index.html, но не в другом файле. – BoltMaud

ответ

2

load является асинхронным. Тебе нужно справиться с этим. Кроме того, вы должны кэшировать шаблон после его загрузки, чем повторять выбор одного и того же шаблона. Попробуйте следующее:

APP.FromFront = Backbone.View.extend({ 
    el: $("#content"), 
    events: { 
    "click #addLink": "addLink", 
    "click .deleteLink": "deleteLink" 
    }, 
    initialize: function() { 
    this.bookmarks = new APP.BookmarksCollection(); 
    this.formTemplatePromise = $.get("../../templates/form_template.html"); 
    this.linkTemplatePromise = $.get("../../templates/links_template.html"); 
    $.when(this.formTemplatePromise, this.linkTemplatePromise) 
    .then(function(formTemplate, linkTemplate) { 
     this.formTemplate = _.template(formTemplate); 
     this.linkTemplate = _.template(linkTemplate); 
     this.render(); 
    }.bind(this)); 
    }, 
    render: function() { 
    this.$el.html(this.formTemplate(/* form data here? */)); 
    var links = []; 
    this.bookmarks.each(function(bookmark) { 
     // below code can be made a 1 liner, I split it for readability 
     var bookJSON = bookmark.toJSON(); 
     var link = this.linkTemplate(bookJSON); 
     links.push(link); 
    }, this); 
    // Single append instead of many for performance 
    $("#links").append(links); 
    } 
}); 
+0

У меня нет данных для formTemplate. Я пробовал ваше предложение, но оно не работает. Я действительно часто получаю сообщение об ошибке «n undefined from underscore-min.js», и с вашим кодом у меня есть «n.replace is not a function» Еще раз спасибо – BoltMaud

+0

С помощью этой опции я не получаю форму – BoltMaud

+0

@ BoltMaud Какую версию подчеркивания вы используете? Я предположил, что вы используете последнюю версию. Был изменен API, см. Этот ответ http://stackoverflow.com/a/25881231/2333214 –

 Смежные вопросы

  • Нет связанных вопросов^_^