我正在构建一个简单的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属性不同步()?
答案 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()仍然没有。有人有主意吗?