1

我们正在使用 Django 框架开发一个 Web 应用程序,并且我们正在使用 Backbone.js 进行 MV 分解。我们有一个视图并在其上调用 render ,它将 div#main 替换为新内容,如下所示:

var GoalListView = Backbone.View.extend({
el: $('#main'),

template: _.template($("#swap").html()),

render: function() {
  $(this.el).html(this.template());
  return this;
}

});

这如我们预期的那样工作(使用模板的内容更改页面),但是在我们创建的下一个视图中,我们无法访问这些新的 DOM 元素中的任何一个。

 el: $('#newId') 

给我们未定义的,即使我们在我们交换的模板中有一个 id 为 newId 的元素。模板交换此时已经发生,那么为什么我们无法访问新元素?

编辑:谢谢,我同意这是一个时间问题。但是对于事件呢?

events: {
    'keypress #goal-entry': 'createOnEnter'
 },

那么没有选项可以在 DOM 中搜索 elem 以将事件附加到,对吗?

4

1 回答 1

2

如果您将$('#newId')它分配给el. 在我们的例子中,如果你插入用于第二个视图的元素,你不需要最初定义它,但必须将它传递给 initialize():

var SomeView = Backbone.View.extend({
  // do NOT define el or $el or id here
  initialize: function($el) {
    this.$el = $el;
    ... go on do more things...
  }
});

然后从应用程序中需要的任何位置初始化第二个视图:

var someView = new SomeView($('#someID'));
于 2012-06-25T18:43:49.680 回答