调用另一个渲染方法以在骨干中呈现子视图

时间:2013-04-03 04:53:45

标签: javascript backbone.js

所以我有两个模板,一个是父模板,另一个是包含子视图的模板。我的第一个父视图扩展了主干的视图,其渲染方法看起来像

render: function () {
  this.$el.append(templates["template-parent-test"](this.model));
  return this;
}

此父视图上有一个按钮。我现在使用的按钮来填充我的视图。它基本上是这样做的:

   populateView: function () {
   // create some dummy test data to match the web service
     _.each(myModel, function (theModel) {
         var testView = new childView({ model: theModel });
         this.$('div-in-parent-view').append(testView.render().$el);
     });
   }

这个骨干视图扩展了Backbone.View及其渲染方法,如下所示:

    render: function () {
        console.log("rendering child view");
        this.$el.html(this.template({ data: this.model.toJSON() }));

        return this;
    }

所以这很有效。但我不想在按下按钮时填充父视图。当我第一次展示它并让按钮按照它实际应该做的那样时,我想填充它。我认为我可以在父视图中从我的渲染函数中调用this.populateView(),但实际上没有任何渲染。但是如果我在我的按钮事件中执行this.populateView(),它将被渲染。为什么这里有区别?感谢。

1 个答案:

答案 0 :(得分:0)

尝试将this添加为third parameter to each。这设定了背景。如果您未指定上下文,this将为window。由于在父视图的render期间您的html尚未出现在网页上,因此无法找到this.$('#div-in-parent-view')以便向其添加html。