【问题标题】:Backbone: Adding a model to a collection from a collection view?骨干:从集合视图将模型添加到集合?
【发布时间】:2012-07-11 17:44:57
【问题描述】:

我有一些代码,我希望 NoteCollectionView 向 NoteCollection 添加新注释。这是由 NoteCollectionView 中的函数 newNote 触发的:

newNote: function(data) {
    var note = new Note(data);
    this.collection.add(note);
},

我对骨干网还是很陌生,我想确保它与服务器同步。我的担忧是:

1) 简单地将这个注释添加到集合中会触发服务器的 save(),并使用服务器提供的 ID 更新模型吗?或者,

2) 如果服务器没有更新我的模型并给我一个实际 ID,我如何使用 note.save() 保存模型并从服务器取回一个 ID?

【问题讨论】:

    标签: javascript backbone.js


    【解决方案1】:

    为了解决您的第一个问题,不,.add 不会触发对服务器的任何类型的调用;它只会将模型添加到集合中。

    但是,您确实有几个选择。一种是创建新的笔记模型,将其保存到数据库中,然后将其添加到集合中:

    newNote: function(data) {
        var note = new Note(data);
        note.save();
        this.collection.add(note);
    }
    

    第二种选择是简单地使用Backbone's collection.create method。给它一个属性哈希,它会

    1. 创建模型
    2. 保存到数据库
    3. 将其添加到集合中

    一举一动,就像这样:

    newNote: function(data) {
        return this.collection.create(data);
    }
    

    collection.create 还返回新创建的模型,如我上面的 return 语句所示。

    【讨论】:

    • 谢谢,很好的回答!那么我的 servlet 应该接受哪些参数,它应该将新模型写入响应中返回的 JSON 吗?
    • collection.create 使用model.save,因此假设您的模型正确保存到数据库中,则无需进一步更改。一般来说,我倾向于在将模型的属性保存并设置为 Backbone 模型后,将其返回为 JSON;这让我可以灵活地在保存操作期间更改某些属性,并且在保存完成后,Backbone 模型的数据将反映这些更改
    • create 会很好用 - 我们可以传递一个选项来阻止它保存到数据库吗?
    • 如果您的请求失败(通过 .create),模型仍会添加到集合中。
    猜你喜欢
    • 2016-04-29
    • 2015-09-05
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多