2016-08-05 2 views
0

Я получаю вложенные данные JSON из REST. Теперь я хочу зафиксировать это значение в переменной. Все работает нормально, но я не знаю, как инициализировать эту переменную.Инициализировать элементы модели в javascript/backbone

Итак, вот мой метод инициализации модели.

initialize: function() { 
     var self = this; 
     if (!this.get('dropdownData')) { 
       this.set({ 
        dropdownData: [] 
       }); 
      } 
     } 
} 

AJAX CALL:

fetchDropdown: function(data) { 
      var self = this; 
      var d = $.Deferred(); 
      var dropdownRequest = $.ajax({ 
       type: "POST", 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       url: this.urlRoot, 
       data: JSON.stringify(data) 
      }); 
      dropdownRequest.done(function(data) 
      { 
       self.set({ 
          dropdownData: data 
         }); 
       console.log("JSON SUCCESS!! YAY!!"); 
       d.resolve(); 

      }); 

Теперь dropdownData должен быть инициализирован как dropdownData: {} or dropdownData: [] или не нужно инициализировать его вообще.

P.S: Сводный фрагмент кода логики работает. Я просто хочу знать, что это правильный путь для инициализации dropdownData в функции initialize в BACKBONE MODEL

+0

Возможный дубликат [Backbone.js Обработка атрибутов, которые являются массивами] (http://stackoverflow.com/questions/6433795/backbone-js-handling-of-attributes-that-are-arrays) – hindmost

ответ

1

Я бы рекомендовал избегать инициализации dropdownData в initialize методе целиком, вместо использования model.defaults здесь. Если добавить следующие строки в определении модели:

defaults: function() { 
    return { 
    dropdownData: [] 
    }; 
}, 

... тогда вы можете удалить весь код в теле вашего метода initialize. Результатом этого изменения будет то, что экземплярная модель будет либо иметь заданное значение (при создании экземпляра) для dropdownData, либо модель по умолчанию будет указывать пустой массив.

Обратите внимание, что здесь важно использовать функциональную версию defaults здесь. Если вы должны были сделать это вместо:

defaults: { 
    dropdownData: [] 
}, 

... то любой экземпляр модели не поставляется со значением для dropdownData разделит значение для dropdownData. Каждый экземпляр будет ссылаться на тот же самый массив.

+0

Можете ли вы любезно помогите мне с этим вопросом: http://stackoverflow.com/questions/38852177/how-to-reload-the-page-as-per-the-dropdown-in-javascript-backbone – Unbreakable

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