1

设想

我正在使用主干制作联系人管理器。我有一个表单,当用户输入数据并按下提交按钮时,用户的数据会进入服务器并将其保存在数据库中。

问题

在将其添加到数据库之前,它确实有效。但是,我也想在添加到数据库后更新集合。出于这个原因,我使用以下代码行来更新集合。

addContact: function (e) {
    e.preventDefault();

    this.collection.create({
        first_name: this.$('#first_name').val(),
        last_name: this.$('#last_name').val(),
        email_address: this.$('#email_address').val(),
        description: this.$('#description').val()
    }, { wait: true });

    console.log(this.collection);
}

上面的函数确实将数据添加到数据库,但它不更新集合。但是当我删除它时{wait: true},它会更新这个集合。

问题

为什么wait: true不允许更新集合,我怎样才能使它工作wait: true

更新

我还添加了如下回调函数

{wait: true, success: this.successCallback}

并像这样添加了该功能

successCallback: function (collection) {
    console.log('call back');
    console.log(this.collection);
}

但它在控制台中没有显示此功能?

更新 2

错误函数截图

在此处输入图像描述

更新 3

xhr 截图

在此处输入图像描述

4

2 回答 2

6

我有同样的问题(甚至是相同的代码)。在我的后端,我有:

Contact::create([
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'email_address' => Input::get('email_address'),
'description' => Input::get('description')
]);

它以状态 200 OK 响应,但我的收藏尚未更新。我google了很多,但没有找到解决方案。

我的后端代码没有向脚本返回任何内容,所以我决定测试返回 smth 是否会做出改变。所以我将我的后端代码更新为:

$contact = Contact::create([
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'email_address' => Input::get('email_address'),
'description' => Input::get('description')
]);
return $contact;

现在它起作用了!在这两种情况下,请求都以 200 OK 响应,但只有当它返回数据时才会触发“成功”事件。

希望对你有帮助。

于 2013-04-29T15:29:47.623 回答
1

我最好的猜测是,虽然服务器接受了新创建的模型,但它无法以状态 200 响应。另外,我建议您检查success内部函数中发生的情况Backbone.Collection,这将有助于您更准确地定位问题。

于 2013-02-02T10:40:33.940 回答