在Backbone View的click事件中创建新的Backbone Views

时间:2014-11-18 12:22:36

标签: javascript jquery backbone.js backbone-views

在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;
        }
    });

我很感谢每一个提示或回复。

1 个答案:

答案 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。

希望这有帮助。