为什么fetch()可以工作但不能同步()同一个Backbone Collection?

时间:2014-01-19 23:15:34

标签: javascript backbone.js

我正在构建一个简单的Backbone应用程序。 'users'集合如下所示:

//users collection module
module.exports = Backbone.Collection.extend({
    url: '/api/users',
    model: UserModel,
    initialize: function() {
        this.fetch();
    }
});

app.js文件如下所示:

var UserCollection = require('./collections/users.js');

(function() {
    var users = new UserCollection();
    users.sync();
})();

所有与browserify捆绑在一起。但是,当它在客户端中执行时,fetch()方法会成功从服务器返回模型,但sync()方法会产生错误:

Uncaught Error: A "url" property or function must be specified

有没有人知道为什么fetch()可能有效,但同一个集合实例和url属性不同步()?

2 个答案:

答案 0 :(得分:1)

http://backbonejs.org/#Model-sync

syncmodel.sync(方法,型号,[选项]) 使用Backbone.sync将模型的状态持久保存到服务器。可以覆盖自定义行为。

fetchmodel.fetch([选项]) 通过委托Backbone.sync重置服务器的模型状态。返回jqXHR。如果模型从未填充过数据,或者您希望确保拥有最新的服务器状态,则非常有用。如果服务器的状态与当前属性不同,将触发“更改”事件。接受选项哈希中的成功和错误回调,它们都作为参数传递(模型,响应,选项)。

// Poll every 10 seconds to keep the channel model up-to-date.
setInterval(function() {
  channel.fetch();
}, 10000);

答案 1 :(得分:1)

好的,部分解决了。很抱歉发布了一个特定于上下文的答案,但经过几个小时的调试后,我感到很沮丧。

一个问题是API路由拒绝将json中的id_id键作为数据发送,并带有对model.sync()的put请求(由collection.sync调用) ())。更改路由处理程序解决了问题

基本上这里的问题是model.save()的PUT请求得到了400错误响应,但Backbone的详细错误报告的是url属性本身不存在。

修改

所有这一切,model.save()和collection.fetch()都可以,但是collection.sync()和model.sync()仍然没有。有人有主意吗?