मैं अपने बालों को बाहर खींच रहा हूँ, मैं माउस घटनाओं मेरी रीढ़ की हड्डी दृश्य पर काम करने के बाद दृश्य फिर से प्रदान की गई है जब तक कि मैं सबसे हास्यास्पद बात कर पाने के लिए प्रतीत नहीं कर सकते हैं:रीढ़ दृश्य घटनाओं के बाद काम नहीं करते फिर से प्रस्तुत करना
$("a").die().unbind().live("mousedown",this.switchtabs);
मैं वास्तव में वहाँ में यह था, लेकिन नवीनतम रीढ़ की हड्डी पर अपडेट करें और नया delegateEvents()
समारोह इस्तेमाल करने की कोशिश करने का फैसला किया।
Appview/AppRouter
|
----->PageCollection
|
------->PageView/PageModel
------->PageView/PageModel these page view/models are not rendered
------->PageView/PageModel
|
------->PageView/PageModel
|
----->render() *when a pageview is rendered*
|
-----> Creates new
Tabcollection
|
--->TabModel/TabView <-- this is where the issue is
क्या होता है tabcollection टैब के सभी प्रबंधन करने के लिए एक मुख्य tabview है कि है, तो प्रत्येक टैब के लिए एक नया मॉडल/दृश्य बनाता है और एक कहते हैं:
यहाँ जिस तरह से अपने प्रोजेक्ट आईडी संरचित है जब भी कोई टैब लोड होता है तो टैबव्यू को पुन: प्रस्तुत करने के लिए श्रोता। यदि टैबव्यू फिर से प्रस्तुत किया जाता है, तब तक कोई माउस ईवेंट तब तक काम नहीं करता जब तक कि मैं वहां उस अंतर्निहित jQuery कथन को नहीं डालता।
यहाँ tabview और प्रस्तुत करना (ive यह छीन नीचे काफ़ी)
var TabPanelView = Backbone.View.extend({
className: "tabpanel",
html: 'no content',
model: null,
rendered: false,
events:{
'click a.tab-nav': 'switchtabs'
},
initialize: function(args)
{
this.nav = $("<ol/>");
this.views = args.items;
this.className = args.classname?args.classname:"tabpanel";
this.id = args.id;
this.container = $("<section>").attr("class",this.className).attr("id",this.id);
_.bindAll(this);
return this.el
},
/*
This render happens multiple times, the first time it just puts an empty html structure in place
waiting for each of the sub models/views to load in (one per tab)
*/
render: function(args){
if(!args)
{
//first render
var nav = $("<aside/>").addClass("tab-navigation").append("<ol/>").attr("role","navigation");
var tabcontent = $("<section/>").addClass("tab-panels");
for(i = 0;i<this.views.length;i++)
{
$("ol",nav).append("<li><a rel='"+this.views[i].id+"' href='javascript:;' class='tab-nav'></a></li>");
tabcontent.append(this.views[i].el);
}
this.$el.empty().append(nav).append(tabcontent);
}
else if(args && args.update == true){
// partial render -- i.e. update happened inside of child objects
var targetid = args.what.cid;
for(i = 0;i<this.views.length;i++)
{
var curcontent = this.$el.find("div#"+this.views[i].id);
var curlink = this.$el.find("a[rel='"+this.views[i].id+"']")
if(this.views[i].cid == targetid)
{
curcontent.html($(this.views[i].el).html());
curlink.text(this.views[i].model.rawdata.header);
}
if(i>0)
{
// set the first panel
curcontent.addClass("tab-content-hide");
}
if(i==0)
{
curcontent.addClass("tab-content-show");
curlink.addClass("tab-nav-selected");
}
// this ridiculous piece of jQuery is the *ONLY* this i've found that works
//$("a[rel='"+this.views[i].id+"']").die().unbind().live("mousedown",this.switchtabs);
}
}
this.delegateEvents();
return this;
},
switchtabs: function(args){
var tabTarget = args.target?args.target:false
if(tabTarget)
{
this.$el.find("aside.tab-navigation a").each(function(a,b)
{
$(this).removeClass("tab-nav-selected")
})
$(tabTarget).addClass("tab-nav-selected");
this.$el.find("div.tab-content-show").removeClass("tab-content-show").addClass("tab-content-hide");
this.$el.find("div#"+tabTarget.rel).removeClass("tab-content-hide").addClass("tab-content-show");
}
}
});
किसी को भी क्यों रीढ़ माउस घटनाएँ अपने आप सब पर आग नहीं है के बारे में सोच सकते हैं, यह है क्योंकि वे डोम पर नहीं हैं ? मैंने सोचा था कि यह वह जगह थी जहां रीढ़ की हड्डी विशेष रूप से उपयोगी थी? ...
आपने अभी तक समस्या निवारण के लिए क्या कदम उठाए हैं? कुछ चीजें मैं कोशिश करूंगा: देखें कि क्या आप बैकबोन स्रोत में ब्रेकपॉइंट सेट कर सकते हैं जहां 'ईवेंट' तत्व संसाधित किया गया है। शायद आपको कुछ अंतर्दृष्टि मिल सकती है। साथ ही, क्रोम के डोम और इवेंट श्रोता ब्रेकपॉइंट्स का उपयोग करने का प्रयास करें। यह आपको यह जांचने में मदद कर सकता है कि क्या कोई कोड निष्पादित किया जा रहा है, या यदि घटनाएं वायरस करने में विफल रही हैं। –
Ive jq $ (दस्तावेज़) .find ("टैब-एनवी-चयनित") के खिलाफ लॉग इन किया गया यह देखने के लिए कि क्या प्रस्तुत किए गए आइटम वास्तव में डोम पर हैं .. ठीक है सही परिणाम प्राप्त करें। मेरे अपने कोड में, ब्रेकपॉइंट्स के माध्यम से चला गया है। मुझे डीबगर के साथ रीढ़ की हड्डी में खुदाई करने के लिए पर्याप्त विश्वास नहीं है। दायरा सब ठीक लगता है ... मैं किसी भी माध्यम से निश्चित नहीं हूं लेकिन ऐसा लगता है कि घटनाओं को फिर से प्रतिपादन के कारण या तो ओवरराइट किया जा रहा है या ... ummm – Alex