2014-11-18 3 views
0

в событии click для PodcastView. Я хотел бы создать несколько новых объектов PodcastItemView. Jquery $ .get работает безупречно, кстати.Создайте новые Backbone Views в событии click Backbone View

Если я запускаю console.debug (this.pinfo) в функции start, я получаю массив JSON моих элементов подкаста (название, desc, url, ...), так что это не проблема. Также он выполняет итерацию x раз через этот массив, так что это тоже работает.

PodcastView = Backbone.View.extend({ 
    tagName: "li", 
    itemTpl: _.template($("#podcast-item").html()), 
    events: { 
     "click .p-click" : "start" 
    }, 
    initialize: function() { 
     this.listenTo(this.model, "change", this.render); 
    }, 
    render: function() { 
     this.$el.html(this.itemTpl(this.model.toJSON())); 
     return this; 
    }, 
    start: function() { 
     $.get(restUri + "podcast/" + this.model.get("title") + "/items", _.bind(function(data) { 
      this.pinfo = data; 
      _.each(this.pinfo, function(o) { 
       var v = new PodcastItemView({model: o}); 
       $("#podcast-items").append(v.render().el); 
      }, this); 
     })); 
    } 
}); 

Что не работает, однако, является создание новых PodcastItemView и добавить их к # подкастов-элементов. Я получаю следующую ошибку:

TypeError: obj[implementation] is not a function (Backbone.js:225)

Это мой PodcastItemView.

PodcastItemView = Backbone.View.extend({ 
     tagName: "div", 
     itemTpl: _.template($("#podcast-item-list").html()), 
     initialize: function() { 
      this.listenTo(this.model, "change", this.render); 
     }, 
     render: function() { 
      this.$el.html(this.itemTpl(this.model.toJSON())); 
      return this; 
     } 
    }); 

Я благодарен за каждый отзыв или ответ.

+0

В первом примере вместо передачи {model: o} попробуйте пройти {model: new (Backbone.Model.extend()) (o)}. При инициализации метода PodcastItemView вы слушаете change.model, но this.model не является Backbone.Model. Попробуйте и дайте мне знать, если это сработает. –

+0

Мои деньги - это то, что вокруг этой линии в магистральном src есть то, где она настраивает слушателей. 'obj [реализация]' в этом случае означает 'model.on', и поскольку у вас просто простой объект, а не базовая модель, нет' model.on', и именно поэтому вы получаете ошибку – Quince

ответ

0

Перепишите функцию start к:

start: function() { 
     $.get(restUri + "podcast/" + this.model.get("title") + "/items", _.bind(function(data) { 
      this.pinfo = data; 
      _.each(this.pinfo, function(o) { 
       var model = new Backbone.Model(o) 
       var v = new PodcastItemView({model: model}); 
       $("#podcast-items").append(v.render().el); 
      }, this); 
     })); 

Как уже упоминалось в комментариях код терпит неудачу, потому что вы пытаетесь связать собственный объект с точки зрения вместо Backbone.Model.

Надеюсь, это поможет.

+0

Awesome! Это работает! Большое спасибо. – undefined

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