2014-06-27 5 views
7

शीर्षक सभी कहते हैं। जब fabric.ITextfabric.Group का हिस्सा है, तो यह अब संपादन योग्य टेक्स्ट की तरह प्रतिक्रिया नहीं करता है। http://jsfiddle.net/vAjYd/Fabric.js - समूहित iText संपादन योग्य नहीं

वहाँ इस समस्या को हल करने के लिए एक रास्ता है:

यहाँ एक यूज़-केस है? अन्यथा मुझे अपना समूह लिखना है।

बीटीडब्ल्यू: ए fabric.Group के कई फायदे हैं, लेकिन अक्षम घटनाक्रम यूआई-एलिमेंट्स (यानी इस उपयोग-मामले या ग्रंथों और समूहों के समूह के रूप में बटन के समूह) के लिए उपयोग करना असंभव बनाता है।

+1

क्या आप इस समस्या का समाधान अपने आप साझा कर सकते हैं? मुझे इस समय एक ही समस्या का सामना करना पड़ रहा है लेकिन मुझे कोई समाधान नहीं मिल रहा है। मैं अब तक यह आया हूं: [http://pastebin.com/dQ742AvG ](http://pastebin.com/dQ742AvG) लेकिन यह पता नहीं लगा सकता कि IText के लिए संपादन को सक्षम कैसे करें http://fabricjs.com/docs /fabric.IText.html काम नहीं करता .. – JoeriSmits

उत्तर

0

वर्तमान में इवेंट के ईवेंट को संभालने का कोई तरीका नहीं है क्योंकि यह समूह में निहित होने पर इसे सौंप दिया नहीं गया है। मुझे लगता है कि यह इसे संभालने का भी पसंदीदा तरीका है क्योंकि यह उपयोगकर्ता को भ्रमित करेगा - क्या होगा यदि वह एकाधिक ग्रंथों को संपादित करना शुरू कर देता है। यह एक गड़बड़ में खत्म हो सकता है। हो सकता है कि आप इस समस्या को हल करने के लिए अपनी स्क्रिप्ट को थोड़ा सा पुन: कार्य कर सकें।

+0

मुझे खेद है, लेकिन यह एक गैर-उत्तर है। "एक कामकाज का प्रयास करें"? एक उदाहरण या कुछ उपयोगी कैसे है? कृपया नीचे दिए गए उत्तर को देखें - यह एक कामकाज है, और यहां तक ​​कि एक कामकाजी उदाहरण भी है! – richb01

12

मुझे इसका उत्तर देने में बहुत देर हो सकती है, लेकिन निश्चित रूप से आप में से कई मुझे इस जवाब की खोज करने के लिए समाधान को पूरा करेंगे। आप पंछी की एक पूरी तरह से काम कर समाधान जहां उपयोगकर्ता iText का पाठ संपादित कर सकते हैं जो एक fabric.group Working solution

दृष्टिकोण यहाँ पीछा का एक हिस्सा है मिल सकती है:

  1. जब उपयोगकर्ता पर दो बार क्लिक वांछित समूह, हम सभी तत्वों को असमूहीकृत iText तत्व
  2. पर
  3. सेट फोकस में प्रवेश .. iText का संपादन मोड & सभी पाठ का चयन करें, ताकि उपयोगकर्ता सीधे संपादन शुरू कर सकते हैं
  4. एक बार उपयोगकर्ता संपादन मोड से बाहर निकलता है, तत्वों को फिर से एक साथ समूहीकृत किया जाता है।

    // ungroup objects in group 
    var items 
    var ungroup = function (group) { 
        items = group._objects; 
        group._restoreObjectsState(); 
        canvas.remove(group); 
        for (var i = 0; i < items.length; i++) { 
         canvas.add(items[i]); 
        } 
        // if you have disabled render on addition 
        canvas.renderAll(); 
    }; 
    
    // Re-group when text editing finishes 
    var dimensionText = new fabric.IText("Dimension Text", { 
        fontFamily: 'Comic Sans', 
        fontSize: 14, 
        stroke: '#000', 
        strokeWidth: 1, 
        fill: "#000", 
        left: 170, 
        top: 60 
    }); 
    dimensionText.on('editing:exited', function() { 
        var items = []; 
        canvas.forEachObject(function (obj) { 
         items.push(obj); 
         canvas.remove(obj); 
        }); 
        var grp = new fabric.Group(items.reverse(), {}); 
        canvas.add(grp); 
        grp.on('mousedown', fabricDblClick(grp, function (obj) { 
         ungroup(grp); 
         canvas.setActiveObject(dimensionText); 
         dimensionText.enterEditing(); 
         dimensionText.selectAll(); 
        })); 
    }); 
    
+0

यह उत्कृष्ट है - धन्यवाद! – richb01

+0

दुर्भाग्यवश, यह अब संस्करण 1.7.1+ के लिए काम नहीं कर रहा है। आईटीएक्स्ट को अचयनित करने के बाद शासक को पुनर्स्थापित नहीं किया जाएगा और कंसोल में निम्न त्रुटि दिखाई देगी: 'TypeError: this._objects [i] अपरिभाषित है''। –

0

धन्यवाद उत्तर के लिए, लेकिन यह यकीन है कि केवल समूह में मौजूद आइटम फिर से एकजुट कर रहे हैं हम 'canvas.forEachObject' 'groupItems' में परिवर्तित करना होगा के रूप में यह होगा नहीं है, सभी वस्तुओं को केवल कैनवास में वापस रखने का प्रयास करें जो समूह से संबंधित हैं। निम्नलिखित कोड देखें

// ungroup objects in group 
var groupItems = [] 
var ungroup = function (group) { 
    groupItems = group._objects; 
    group._restoreObjectsState(); 
    canvas.remove(group); 
    for (var i = 0; i < groupItems.length; i++) { 
     canvas.add(groupItems[i]); 
    } 
    // if you have disabled render on addition 
    canvas.renderAll(); 
}; 

// Re-group when text editing finishes 
var dimensionText = new fabric.IText("Dimension Text", { 
    fontFamily: 'Comic Sans', 
    fontSize: 14, 
    stroke: '#000', 
    strokeWidth: 1, 
    fill: "#000", 
    left: 170, 
    top: 60 
}); 
dimensionText.on('editing:exited', function() { 
    var items = []; 
    groupItems.forEach(function (obj) { 
     items.push(obj); 
     canvas.remove(obj); 
    }); 
    var grp = new fabric.Group(items.reverse(), {}); 
    canvas.add(grp); 
    grp.on('mousedown', fabricDblClick(grp, function (obj) { 
     ungroup(grp); 
     canvas.setActiveObject(dimensionText); 
     dimensionText.enterEditing(); 
     dimensionText.selectAll(); 
    })); 
}); 
संबंधित मुद्दे