Я пытаюсь загрузить данные из API в представление. Однако данные не отображаются на мой взгляд.Магистраль: как загрузить коллекцию в представлении (в том числе требуется)
Я попытался получить информацию о коллекции в маршрутизаторе, а также в модели. Однако дата не будет даже console.log данных. Не говоря уже о том, что я могу загрузить данные в представление.
Я использую для загрузки файлов JavaScript. Можете ли вы посмотреть и посмотреть, что я делаю неправильно здесь?
Я вижу эту консоль.log: console.log («Коллекция людей инициализирована»);
И я также вижу загруженную страницу и json. Но не console.log данных в функции URL-адрес ... На самом деле я получаю эту ошибку в консоли:
Error: A "url" property or function must be specified
В Backbone Router:
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 в вашей функции 'url', вы просто вернете api url. или установите его в api url как строку. backbone заботится о вызове ajax и дает вам события, которые вы можете подключить, чтобы отслеживать происходящее. – kalley
, так как я могу отправить данные на url, используя сообщение? – BonifatiusK
, когда вы вызываете 'Collection.fetch', вы можете передать тот же объект данных, который вы использовали ранее. Итак, что-то вроде 'usersCollection.fetch ({data: { " admin ": OF.login.attributes.admin, " session ": OF.login.attributes.session }})'. – kalley