【发布时间】:2013-12-12 13:52:19
【问题描述】:
我正在尝试将数据从 API 加载到视图中。然而,在我看来,数据并没有出现。
我尝试在路由器和模型中获取集合信息。 然而,日期甚至不会 console.log 数据。更不用说我可以将数据加载到视图中了。
我正在使用 require 来加载 JavaScript 文件。你能看看我在这里做错了什么吗?
我确实看到了这个 console.log: console.log("人物集合已初始化");
我还可以看到加载的页面和 json。但不是url函数中数据的console.log...实际上我在控制台中得到了这个错误:
Error: A "url" property or function must be specified
在骨干路由器中:
var OF = OF || {};
OF.AdminRouter = Backbone.Router.extend({
routes: {
"users": "goToUsers",
"users/*other": "goToUsers"
},
goToUsers: function() {
require(['./models/users', './views/users_view', './views/menu_view', './collections/user_collection'], function(UsersMdl, UsersView, MenuView, UsersCollection) {
OF.usersView = new OF.UsersView;
OF.usersView.render();
});
}
});
收藏:
var OF = OF || {};
OF.UsersCollection = Backbone.Collection.extend({
initialize: function() {
console.log("People Collection is initialized");
},
url: function() {
var that = this;
var sendObj = {
"admin": OF.login.attributes.admin,
"session": OF.login.attributes.session
};
$.ajax({
url: 'php/api/users/',
type: "POST",
dataType: "json",
data: sendObj,
success: function(data) {
console.log(data);
},
error: function(data) {
console.log("ERR: " + data);
}
});
},
model: OF.UsersMdl
});
模型:
var OF = OF || {};
OF.UsersMdl = Backbone.Model.extend({
default: {
username: '',
homefoldersize: '',
email: ''
},
initialize: function(){
//on change functions can be done here
OF.usersCollection = new OF.UsersCollection();
OF.usersCollection.fetch();
},
result: {
success: false,
message: ''
},
validate: function(att) {
}
});
观点:
var OF = OF || {};
OF.UsersView = Backbone.View.extend({
el: '#content',
remove: function() {
this.$el.empty();
this.stopListening();
return this;
},
initialize: function() {
//set the new address variable.
OF.usersMdl = OF.usersMdl || new OF.UsersMdl();
},
render: function() {
/*
//first check if you are allowed to see this page
if (!OF.login || !OF.login.isValid()) {
OF.router.navigate('login', {trigger: true});
return;
}
*/
//save this in that
var that = this;
//when importing of login page (and fill it with info) is done
$.when(OF.template.get('users-usersField', function(data) {
var htmlSource = $(data).html();
var template = Handlebars.compile(htmlSource);
var compiled = template(OF.usersMdl.attributes);
//now place the page
that.$el.html(compiled);
//then start the menu
})).then(function(){
setTimeout(function(){
OF.menuView = new OF.MenuView;
OF.menuView.render();
}, 100);
});
$('#logout').show();
}
});
谢谢。
【问题讨论】:
-
url应该返回网址。因此,无需在url函数中进行 AJAX 调用,您只需返回 api url。或将其设置为 api url 作为字符串。主干负责 ajax 调用并为您提供可以挂钩的事件以跟踪正在发生的事情。 -
那么如何使用 post 将数据发送到 url?
-
当你调用
Collection.fetch时,你可以传入你之前使用的同一个数据对象。所以,像usersCollection.fetch({ data: { "admin": OF.login.attributes.admin, "session": OF.login.attributes.session } }). -
这确实有效,但它现在似乎处于循环中。 url 被放置在 Collection 中,在模型的初始化中,我添加了集合,然后获取它。好像调用了两次集合的初始化,然后继续调用json函数。
标签: javascript backbone.js requirejs backbone-views backbone.js-collections