Я начал изучать библиотеку Backbone.js, выполнив простой проект. Увидев несколько учебников, я выпустил код, который показан ниже. Я знаю, что это может выглядеть не идеально, поскольку я новичок в разработке javascript.Обновление глобальной переменной локально в Javascript
Итак, ниже, я собираю список национальностей из API, а затем получаю количество студентов из этих стран. На данный момент это кажется явным, но проблема в том, что мне нужно получить общее количество учащихся по национальности, поэтому в функции сбора второй коллекции есть счетчик. Проблема, с которой я столкнулся, - это Javascript. В принципе, определение «общего количества» в глобальном масштабе и обновление его локально - это то, что мне нужно сделать. Я столкнулся со многими темами, подобными этому, но, честно говоря, недостаточно хорошо понял, чтобы воспроизвести собственное решение. Еще раз, мой вопрос заключается в том, как я могу реорганизовать этот код, чтобы я мог обновить значение переменной «total» локально, а затем использовать обновленный результат вне функции внутренней выборки. Я ценю ваши ответы и советы. Заранее спасибо.
$.ajaxSetup({
crossDomain : true,
cache : false,
contentType : "application/json",
dataType : "json"
});
var baseURL = "http://lucalongo.eu:80/courses/2014-2015/questionnaireDIT/app/index.php";
var mModel = Backbone.Model.extend({});
var cNationality = Backbone.Collection.extend({
model: mModel,
url: this.baseURL + "/nationalities"
});
var cStudent = Backbone.Collection.extend({
model : mModel,
initialize : function(models, options) {
this.url = "http://lucalongo.eu:80/courses/2014-2015/questionnaireDIT/app/index.php/students/nationality/" + options.id;
}
});
var vView = Backbone.View.extend({
render: function(){
var total = 0;
this.collection = new cNationality();
this.collection.fetch({
success: function(c){
_.each(c.models, function(col) {
var nationalDesc = col.toJSON().description;
var nationalID = col.toJSON().id;
var studentNationality = new cStudent([], {id : nationalID});
studentNationality.fetch({
success: function(c){
//console.log(nationalDesc + ": " + c.length);
total = total + c.length;
console.log(total);
}
});
});
}
});
console.log("Total:" total); // still displays 0
}
});
var v = new vView();
v.render();
Backbone.history.start({pushState: true});
Таким образом, вы заказываете доставку пиццы по телефону. Вы пытаетесь съесть пиццу перед ее доставкой. Он асинхронный, вы читаете значение до его установки. Вот почему существует метод успеха. – epascarello
Вот почему я разместил этот вопрос :) Я хотел бы узнать, как я могу изменить этот код, чтобы заставить его работать. Спасибо –
Посмотрите на обещания. – epascarello