我在 Backbone Js 中编码,这是我的代码:
var Router, UserList, Users, router, userList;
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
return options.url = "http://backbonejs-beginner.herokuapp.com" + options.url;
});
Users = Backbone.Collection.extend({
url: '/users'
});
UserList = Backbone.View.extend({
el: '#app',
render: function() {
var users;
users = new Users();
return users.fetch({
success: function() {
return console.log("Please log something!! ");
}
});
}
});
userList = new UserList();
Router = Backbone.Router.extend({
routes: {
'': 'home'
},
home: function() {
console.log('Welcome home my friend!!');
return userList.render();
}
});
router = new Router();
Backbone.history.start();
但是 collection.fetch() 中的成功回调不起作用。它没有记录任何东西!
这是 JsFiddle:jsfiddle.net/9DjPY/1
请帮帮我!
最佳答案
如果您想更改 AJAX 实现,Backbone 的方法是扩展他们的方法 Backbone.ajax 而不是更改 jQuery
View 应该返回它自己而不是集合实例。 此外,您可能应该听添加或重置,而不是听成功。
var Router, UserList, Users, router, userList,
oldSync = Backbone.sync;
Backbone.ajax = function(options) {
var args = Array.prototype.slice.call(arguments, 1);
options || (options = {});
if (options.url) {
options.url = (/^https?/.test(options.url) ? '' : 'http://backbonejs-beginner.herokuapp.com') + options.url;
}
return Backbone.$.ajax.apply(Backbone.$, [options].concat(args));
};
Users = Backbone.Collection.extend({
url: '/users'
});
UserList = Backbone.View.extend({
el: '#app',
initialize: function () {
this.collection = new Users();
},
render: function() {
this.collection.fetch({
success: function () { console.log('Users', arguments) }
});
return this;
}
});
userList = new UserList();
Router = Backbone.Router.extend({
routes: {
'': 'home'
},
home: function() {
console.log('Welcome home my friend!!');
return userList.render();
}
});
router = new Router();
Backbone.history.start();
这是一个工作示例 - http://jsfiddle.net/hypernurb/9DjPY/5/ .
希望这对您有所帮助。
关于javascript - 主干集合 - fetch(),成功回调不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21801094/