2015-12-31 5 views
3

Я правильно закодировал простой REST api и несколько базовых моделей. Моя родительская модель называется Topic, а дочерняя модель - Questions.Магистральный вид/шаблон не загружается из REST

Я пытаюсь вызвать метод get на REST api и отобразить полученный объект Topic пользователю в презентабельном виде. Я получаю json (можно увидеть на вкладке сети в Chrome), но он не будет правильно отправлен на просмотр.

Модель:

var Topic = Backbone.Model.extend({ 
    urlRoot: ROOT + '/topic', 
    idAttribute: 'topicId', 
    initialize: function() { 
     this.questions = new Questions([], {parent: this}); 
    }, 
    toJSON: function() { 
     var json = Backbone.Model.prototype.toJSON.call(this); 
     json.questions = this.questions.toJSON(); 
     return json; 
    } 
}); 
var Topics = Backbone.Collection.extend({ 
    model: Topic, 
    url: ROOT + 'topic', 
    parse: function (response) { 
     return response.results; 
    } 
}) 

REST URL:

http://localhost/Project/index.php/rest/resource/topic/

Магистральная Вид: Это где я думаю, что ошибка ... (журнал консоли ниже принтами пустой объект)

var TopicListView = Backbone.View.extend({ 
     el: '.page', 
     render: function() { 
     var that = this; 
     var topics = new Topics(); 
     topics.fetch({ 
      success: function (topics) { 
       console.log(topics); 
      var template = _.template($('#topic-list-template').html(), {topics: topics.models}); 
      that.$el.html(template); 
      } 
     }) 
     } 
    }); 

Используя вышеуказанные функции:

var topic = new Topic(); 
topic.fetch(); 
topicListView = new TopicListView(); 

var Router = Backbone.Router.extend({ 
    routes: { 
     "": "home" 
    } 
}); 
var router = new Router; 

// render topic list for 'home' 
router.on('route:home', function() { 
    topicListView.render(); 
}); 

Edit: Решение: Переопределение функции синтаксического анализа в коллекции оказалась ошибка. Интересно, почему ...

ответ

1

Аргумент topics в вашем success обработчике shadowing переменная topics.

Аргумент содержит разобранный ответ JSON, а не базовую коллекцию. Вам это не нужно, поэтому вы можете удалить аргумент.

Ссылка на topics будет теперь в вашей коллекции, поэтому у topics.models будет значение, которое вы ожидаете.

topics.fetch({ 
    success: function() { // argument removed here so `topics` is no longer shadowed 
    var template = _.template($('#topic-list-template').html(), { topics: topics.models }); 
    that.$el.html(template); 
    } 
}) 
+0

Спасибо, но это не сработало. Проблема такая же, я попробовал 'console.log (themes.models);' в той же функции успеха, и это пустой массив. – john

+0

Хорошо. Можете ли вы отправить ответ на запрос на выборку? – joews

+0

На вкладке в сети: '[{" topicId ":" 1 "," topicDes ":" Music "}, {" topicId ":" 2 "," topicDes ":" Technology "}, {" topicId ":" 3 "," topicDes ":« Клавиатуры »}]' – john

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