私は次の機能に取り組んでいます。ユーザーがページ上の写真をクリックmodalView
すると、そのアイテムの詳細を示すモーダルが表示されます。modalView
で、ユーザーは別のアイテムの写真をクリックできます。これにより、最初のモーダルウィンドウが閉じ、この次のアイテムの完全な詳細を含むmodalView
新しいモーダルウィンドウが開きます。modalView
の開閉はmodalView
ルーター機能で行います。
(ユーザーにちらつきが発生する場合がありますが、それは別の問題です)
問題:modalView
ユーザーが内の別のアイテムの写真をクリックするshowModal()
と、現在のアイテムmodalView
が閉じられ、URLが次のアイテムのURLに更新されます/product/1234
が、新しいアイテムmodalView
は表示されません。console.log()
デバッグに使用すると、最初modalView
に閉じ、2番目にmodalView
開いてから閉じることがわかりました。
何が起こったのですか、そしてこれをどのように修正できますか?
ルーター
var AppRouter = Backbone.Router.extend({
routes: {,
'product/:id': 'showModal'
},
showModal: function(id) {
// Close any existing ModalView
if(app.modalView) {
app.modalView.closeModal();
console.log('closing');
}
// Create new ModalView
app.modalView = new ModalView({ model: new Product({id:id}) });
console.log('creating new');
}
});
app = new AppRouter();
Backbone.history.start({
pushState: true,
root: '/'
});
意見
ModalView = Backbone.View.extend({
el: $('#modal'),
template: _.template( $('#tpl_modal').html() ),
events: {
'click .more_photo': 'showModal',
},
initialize: function() {
// Update Model with Full details
var self = this;
this.model.fetch({
data: {post_id: self.model.get('id')},
processData: true,
success: function() {
self.render();
});
},
render: function() {
$(this.el).show().append( this.template( this.model.toJSON( this.model ) ) );
},
closeModal: function() {
// Restore scrollbars
$(this.el).css('overflow-y', 'auto');
$('body').removeClass('noscroll');
// Close modal and remove contents
$(this.el).fadeOut();
$(this.el).empty();
},
showModal: function() {
// Update URL & Trigger Router function `showModal`
app.navigate('/product/' + this.model.get('id'), {trigger:true});
}
});
Console.log出力
creating new
<----clicks on another photo
closing
creating new