EDIT3: चेतावनी! यह उत्तर पुराना हो सकता है। मुझे एक टिप्पणी मिली कि यह उत्तर अब काम नहीं करता है और जांच करने का समय नहीं है (मैं व्यक्तिगत रूप से इस विधि का उपयोग नहीं करता)।
मैं अपने यूआई पुस्तकालय के रूप में ट्विटर/बूटस्ट्रैप उपयोग करने के लिए और डिफ़ॉल्ट टैग रैपिंग (मेरी <tbody>
और मेरे <tr>
रों के बीच विशेष रूप से एक <div>
) की वजह से तालिका स्टाइल के साथ कुछ मुद्दों पर हो रही थी की तरह।
कुछ खोदने के बाद, मुझे Region
पर how the View
attaches the el
पर मेरियनेट दस्तावेज़ों में कुछ मिला। Backbone builds the el
विभिन्न View
विशेषताओं से और निर्मित तत्व को अद्यतित रखता है ताकि इसे किसी भी समय प्रस्तुत किया जा सके। तो मैंने सोचा, अगर view.el
माता-पिता है, तो क्यों न केवल HTML सामग्री का उपयोग करें? मैरियनेट create a custom Region
का एक तरीका भी प्रदान करता है I open
फ़ंक्शन के साथ एक कस्टम Region
बनाकर मैं सबकुछ चलाने में सक्षम था। इस तरह से मैं निर्दिष्ट कर सकता हूं कि मैं किन क्षेत्रों को टैग के साथ लपेटना चाहता हूं और जो मैं नहीं करता हूं। निम्न उदाहरण स्निपेट में, मैं अपना कस्टम गैर-रैपिंग Region
(NowrapRegion
) बना देता हूं और इसे अपने (MyLayout
) में अपने <tbody>
के लिए उपयोग करता हूं (मेरे वास्तविक प्रोग्राम में देखे गए विचार <tr>
एस) बनाते हैं।
var NowrapRegion = Marionette.Region.extend({
open: function(view){
this.$el.html(view.$el.html());
}
});
var MyLayout = Marionette.Layout.extend({
template: templates.mylayout,
regions: {
foo: '#foo',
columns: '#columns', //thead
rows: { selector: '#rows', regionType: NowrapRegion } //tbody
}
});
BOOM! जब मैं इसे चाहता हूं तो लपेटना और जब मैं नहीं करता तो कोई नहीं।
संपादित करें: यह events
को प्रभावित करता है *View
स्तर पर लागू होता है। मैंने अभी तक इसे नहीं देखा है, लेकिन चेतावनी दीजिये कि वे ट्रिगर नहीं लग रहे हैं।
चाहे यह करने का "सही" तरीका है या नहीं, मुझे यकीन नहीं है। मैं @ derick-bailey से किसी भी प्रतिक्रिया का स्वागत करता हूं, उसे यह देखना चाहिए।
EDIT2: @ क्रिस-नेले ने निम्नलिखित का सुझाव दिया, मैंने अभी तक यह सत्यापित नहीं किया है लेकिन ऐसा लगता है। धन्यवाद!
पर एक गहरे क्लोन का उपयोग करके, एचटीएमएल दृश्य को कॉपी करने की बजाय, बच्चे नोड घटनाओं और डेटा को बनाए रखेंगे।
var NowrapRegion = Marionette.Region.extend({
open: function(view){
view.$el.children().clone(true).appendTo(this.$el);
}
});
क्या इसे पूरा करने के लिए कोई मैरियनेट विशिष्ट तरीका है? अधिमानतः मुझे लगता है कि 'टेम्पलेट' विशेषता – streetlight
उत्कृष्ट का उपयोग करना अच्छा होगा। मैं उन सभी अन्य उत्तरों को वास्तव में नापसंद करता हूं जो मैं इस समस्या को हल करने के लिए डोम में हेरफेर करने के लिए कह रहा हूं। क्यों, जब आप केवल एलीमेंट() सेट कर सकते हैं? – trusktr