【发布时间】:2012-07-18 13:53:12
【问题描述】:
在我的 Backbone 应用上,其中一个视图未按预期呈现。
当用户遵循“test/addtests”路径时,它会调用如下所示的函数
addtests: function () {
this.testView = new TestView();
},
然后应该使用下面显示的初始化函数自动呈现视图
window.TestView = Backbone.View.extend({
template: _.template($('#test').html()),
initialize: function () {
tests.bind("reset", this.render, this);
},
render: function (eventName) {
alert('asdf');
$(this.el).html(this.template());
_.each(tests.models, function (test) {
this.renderSelectBox(test);
}, this);
return this;
},
renderSelectBox: function (test) {
var optionView = new TFS.FormOptionView({
model: test
});
$(this.el).append(optionView.render().el);
},
events:{
"click button": "addTest"
},
...ect
});
但是什么也没发生,它只是显示最后一页的内容。我在渲染函数中设置的警报也不会触发。然而奇怪的是,如果我点击刷新,警报会触发:S。
路由设置正确,并正确指向'addtests'函数,似乎只是没有按预期初始化视图。
另外我发现令人困惑的第二件事是,如果我有一个完整的集合,我无法使用 get 方法来提取单个模型。例如
players // a full collection
var test = players.get(1);
console.log(test.get('id')); //undefined
:S
【问题讨论】:
-
合乎逻辑的结论是视图中的
reset事件没有触发。在附加事件处理程序之前添加对.render的显式调用怎么样? -
你的意思是“
collection.bind("reset", this.render, this);”吗? -
没有测试是存储的集合
-
良好的做法是使用
this.testView = new TestView({collection: tests});,以便视图只管自己的事情。渲染绑定到集合的重置事件,并在获取集合时启动重置事件。所以你拿来收藏吗?没有成功获取 == 没有渲染! -
谢谢 jakee,为了更好的练习,我会这样做,我现在有一个问题,因为事件没有触发,任何人都可以看到事件不会触发的原因!
标签: javascript oop backbone.js