【问题标题】:Backbone.js view not renderingBackbone.js 视图未呈现
【发布时间】: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


【解决方案1】:

哎呀,我的印象是绑定函数正在调用渲染,但似乎不是这样。

我只是放了

this.render();

在视图初始化函数中,它起作用了。

有谁知道为什么我无法从上述集合中拉出单个模块??

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多