Backbone:渲染前获取

时间:2014-07-02 16:12:29

标签: javascript mongodb backbone.js

我正在尝试使用以下方法将新项目添加到我的主干集合中:

window.bearList.create({ name: "Tina" } );

这正确地将新项目保存到服务器,因为之后我可以在服务器上看到这个,这就是我想要的。 (我正在使用MongoDB)

{"name":"Tina","_id":"53b41d92b7083d0b00000009","__v":0}

我在bearList ListView中有这个绑定:

    initialize: function() {
        _.bindAll(this, 'render');
        this.collection.bind('add', this.render);
    },

问题是上面的代码只是将以下内容添加到我的集合视图中,直到我重新加载页面。

 {"name":"Tina"}

我尝试过使用model.save()回调,但我仍然遇到同样的问题。

就像我说的那样,服务器上的一切看起来都很好,一旦我重新加载页面,该集合就会有'Tina'的修正版本。

但由于某种原因,它没有获得ListView的'render'事件的完整模型。我已尝试在ListView渲染方法上单独获取每个模型,但这不起作用,无论如何都是不好的做法。

有人能帮助我吗?

以下是我的完整代码:

window.ListView = Backbone.View.extend({
    tagName: 'ul',
    className: 'list-group',

    initialize: function() {
        _.bindAll(this, 'render');
        this.collection.bind('add', this.render);
    },

    render: function(){
        this.$el.html(" ");
        this.collection.each(function(item){
        var listItemView = new ListItemView({ model: item });
        this.$el.append(listItemView.render().el);
        }, this);
    return this;
    },

});



window.ListItemView = Backbone.View.extend({
    tagName: 'li',
    className: 'list-group-item',

    initialize:function () {
        this.model.bind("change", this.render);
    },

    render:function () {
        console.log(JSON.stringify(this.model.toJSON()));
        this.$el.html("<a href='#"+ this.model.hashType + "/"+this.model.get('_id')+"' >" + this.model.get('name') + "</a>");
    return this;
    }
});

2 个答案:

答案 0 :(得分:0)

传递等待:真实。

window.bearList.create({ name: "Tina" }, {wait: true} );

http://backbonejs.org/#Collection-create

  

如果您想在添加之前等待服务器,请传递{wait:true}   该系列的新模型。

答案 1 :(得分:0)

收听sync事件,因为add只会在骨干网中添加您创建的值。 http://backbonejs.org/#Sync

并提示:使用listenTo来使用Backbone的更多功能。 而不是

initialize:function () {
    this.model.bind("change", this.render);
},

使用:

initialize:function () {
    this.listenTo( this.model, "change", this.render );
},