0

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

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(),它就会被渲染。为什么这里有区别?谢谢。

4

1 回答 1

0

尝试将this第三个参数添加到each. 这设置了上下文。当您不指定上下文时,this将为window. 并且由于您的 html 在父视图期间尚未​​出现在页面上render,因此无法找到this.$('#div-in-parent-view')以便将 html 添加到其中。

于 2013-04-03T05:49:20.500 回答