Попробую и упрощать это как можно больше ..Backbone.js - Fetch() не вызывается из моего маршрутизатора
Моего routes.js:
direct_message: function(member_id) {
list.conversations(function(conversations) {
conversation_view.model = conversations.models[conversations.models.length - 1];
conversation_view.render();
});
ИТАК conversations()
является функция внутри моей модели списка, которая имеет удобный метод fetch() и обратный вызов (который является методом, который я передаю ему). Он проверяет, чтобы увидеть, если вещи были неправдоподобными, и если да, то возвращает обратный вызов с надуманными параметрами .. Как так:
conversations: function(callback) {
var _callback = _.bind(function() { if(callback) callback(this._conversations); }, this);
if(!this._conversations) {
this._conversations = new app.collections.Conversations();
this._conversations.url = this._url();
app.events.on('pusher:conversation_started', this._conversation_started, this);
}
if(this._conversations._fetched) {
_callback();
} else {
this._conversations.on('reset', _callback);
if(!this._conversations._fetching) {
this._conversations._fetching = true;
this._conversations.fetch({
success: function(c) { c._fetched = true; },
error: function(c) { c._fetching = false; }
});
}
}
return this._conversations;
},
Уф! Надеюсь, я еще не потерял тебя. Так что это каскадировало все хорошо и правильно на некоторое время. Но теперь, по какой-то причине, когда я выполняю этот метод в своем routes.js
, он возвращается обратно как undefined
.
Причина, по которой я думаю, что это происходит, заключается в том, что запрос на выбор является асинхронным. Таким образом, возврат возвращается правильно, но оператор return
вызывается перед возвратом данных. Таким образом, все остальные вызовы conversation()
действительно корректно возвращаются, за исключением первого, который его инициализировал.
Тогда я думал, позвольте мне добавить async: false
к вызову fetch(), но когда я это сделаю, по какой-то причине последующие звонки возвращаются undefined
. Есть что-нибудь еще я могу сделать? Может, что-то еще я должен смотреть? Возможно, каким-то образом включить в него объекты $ .deferred?
Большое спасибо!
Ничего себе, я не могу поверить, что не думал об этом. Большое спасибо Beetroot-Beetroot! (Я на самом деле пил свеклу прямо сейчас) – Trip
«Пить свечку» - странно это то, чего я никогда не делал - слишком много, как людоедство, я полагаю. –