2014-02-21 2 views
-1

Функция calline renderBankInvContainers не добавляет html (поле String) на странице html.Добавление строки html в шаблон handlebars в backboneJS не работает?

var editAccountView = Backbone.View.extend({ 

    tagName : 'div', 
    className : 'edit-account-wrap', 

    initialize : function() { 
     var self = this; 
     this.$el.append(editAccountTmpl()); 
     $('.application-content-wrap').append(this.$el); 
     this.collection = new itemFormDataSummaryCollection(); 
     this.collection.fetch({ 
      timeout : 30000, 
      type : 'POST',     
      success : function(response) {      
       var result = response.toJSON(); 
       if (result[0].containerType == 'BANK' || result[0].containerType == 'STOCKS') { 
        self.renderBankInvContainers(); 
       } 
       self.$el.find('.edit-account-wrap ').html(editAccountContentTmpl()); 
      } 
     }); 
    }, 

    renderBankInvContainers : function() { 
     var field; 
     field = this.displayField("Nickname", itemFormData['nickname'], "text", "nickname", false); 
     $('.edit-account-wrap').find('.input-row').append(field); 
     field = this.displayField("Include in Net Worth", itemFormData['includeInNetworth'], "toggle", "includeInNetworth", false); 
     $('.edit-account-wrap').find('.input-row').append(field); 
    }, 

    displayField : function(dispLabel, dispData, dispComp, name, readOnly) { 
     var finalDispalyField; 
     if (dispComp == "text") { 
      var label = '<div class="small-6 columns"><label>' + dispLabel + '</label></div>'; 
      var input; 
      if (readOnly) { 
       input = '<div class="small-6 columns"><input type="text" name"' + name + '" value="' + dispData + '" readonly></div>'; 
      } else { 
       input = '<div class="small-6 columns"><input type="text" name"' + name + '" value="' + dispData + '"></div>'; 
      } 
      finalDispalyField = label + input; 
      return finalDispalyField; 
     } 
     if (dispComp == "toggle") { 
      var label = '<div class="small-6 columns"><label>' + dispLabel + '</label></div>'; 
      var input = '<div class="small-6 columns"><div class="switch small round"><input id="z" name="' + name + '" type="radio" checked><input id="z" name="' + name + '" type="radio"></div></div>'; 
      finalDispalyField = label + input; 
      return finalDispalyField; 
     } 
    } 
});  

return editAccountView; 

ответ

1

Ваши itemFormData в функции renderBankInvContainers не установлен.

Try в выборки обратного вызова успеха, чтобы установить коллекцию вида, как это:

success : function(response) { 
    self.collection = response; 
    var result = response.toJSON(); 
    if (result[0].containerType == 'BANK' || result[0].containerType == 'STOCKS') { 
     self.renderBankInvContainers(); 
    } 
    self.$el.find('.edit-account-wrap ').html(editAccountContentTmpl()); 
} 

и в вашей renderBankInvContainers функции вы можете использовать this.collection.

Я думаю, что вам нужно изменить оператор if в этой функции.

0

была ошибка, потому что я загружал шаблон после метода append(). перед вызовом renderBankInvcontainers() мне нужно вызвать оператор ниже. self. $ El.find ('. Edit-account-wrap') .html (editAccountContentTmpl());

success : function(response) { 
    self.collection = response; 
    var result = response.toJSON(); 
    **self.$el.find('.edit-account-wrap ').html(editAccountContentTmpl());** 
    if (result[0].containerType == 'BANK' || result[0].containerType == 'STOCKS') { 
     self.renderBankInvContainers(); 
    }  
} 
Смежные вопросы