在PodcastView的click事件中我想创建多个新的PodcastItemView对象。 jquery $ .get完美无缺,顺便说一下。
如果我在start-function中执行console.debug(this.pinfo),我会收到播客项目的jSON数组(title,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并将它们附加到#podcast-items。我收到以下错误:
TypeError:obj [implementation]不是函数(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 :(得分: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。
希望这有帮助。