2015-02-01 11 views
6

मेरे पास एक ही साझा पर्यवेक्षक के साथ संपत्तियों की एक मात्रा है जो मैं देखना चाहता हूं। मान लें, मैं संशोधन इतिहास को ट्रैक करना चाहता हूं।पॉलिमर ने पर्यवेक्षक साझा किया: मूल संपत्ति प्राप्त करना

myObserver: function(oldValue, newValue) {} 

जब से मैं परिवर्तन पर नज़र रखना चाहते हैं, मैं संपत्ति बदल का नाम पता करने की जरूरत है: दुर्भाग्य से, मानक बहुलक पर्यवेक्षक कॉलबैक, according to the documentation, एक अनाड़ी प्रोटोटाइप है। myObserver के arguments रिवर्स इंजीनियरिंग द्वारा, मुझे आश्चर्य की बात है कि, Arguments[3] प्रकार का कार्य तीसरा तर्क है। तो कोड^डब्ल्यू नीचे WooDoo-जादू चाल करना होगा:

myObserver: function() { 
    if (arguments.length > 2) { // observer called by polymer 
    var args = arguments[2]; 
    var idx = args[1].length - 1; // sic! index of changed is stored in index 
    var prop = args[2][idx * 2 + 1][0]; 
    var val = args[0][idx]; 

    console.log("Property [" + prop + "] got new value: " + val); 
    } 
    ... 
} 

समझदार और लालसा समझदार रहने के लिए होने के नाते, मैं जानना चाहता हूँ मैं पर्यवेक्षक से बदली हुई विशेषता नाम पाने के लिए और अधिक मिलनसार तरह से याद किया है कि क्या करना चाहते हैं।

@ebidel और @robdodson क्या आप उस पर कुछ प्रकाश डालेंगे? क्या arguments[2] नवीनतम संस्करणों में समर्थित होगा? क्या परिवर्तनों पर प्रतिक्रिया करने का कोई बेहतर तरीका है?

अग्रिम धन्यवाद।

उत्तर

0

मुझे लगता है कि आप एक अलग तंत्र की तलाश में हैं। यदि आप वास्तव में कार्यक्षमता को लागू करने के लिए एक अलग तंत्र को अपनाने के लिए स्वीकार करेंगे, तो आपको MutationObserver की जांच करने में कोई दिक्कत नहीं हो सकती है। मैंने this answer में डेमो के साथ खेलने में कामयाब रहा है और आसानी से मेरे क्रोम कंसोल को लॉग इन कर सकता है जो इस उत्परिवर्तन ऑब्सर्वर देख रहे थे।

आशा है कि इससे मदद मिलती है!

+0

हाँ, धन्यवाद, मैं 'MutationObserver' के बारे में पता है। मैं 'DOMSubtreeModified' ईवेंट श्रोता का भी उपयोग कर सकता था। सवाल _Polymer_ द्वारा प्रदान किए गए पहले से मौजूद ईवेंट हैंडलर का उपयोग करने के बारे में था। – mudasobwa

0

इसलिए, यदि मैं सही ढंग से समझता हूं, तो लक्ष्य एकाधिक संपत्ति परिवर्तनों के लिए एक पर्यवेक्षक का उपयोग करना है, और पर्यवेक्षक के अंदर आपको बदलने वाली संपत्ति का नाम निर्धारित करने में सक्षम होना चाहिए।

मैंने थोड़ा सा प्रयोग किया और पाया कि आप इसे एक गहरे उप-संपत्ति पर्यवेक्षकों के साथ प्राप्त कर सकते हैं।

<!doctype html> 
<html> 
<head> 
<meta name="description" content="http://stackoverflow.com/questions/28265025"> 
    <meta charset="utf-8"> 
    <base href="http://polygit.org/components/"> 
    <script href="webcomponentsjs/webcomponents-lite.min.js"></script> 
    <link href="polymer/polymer.html" rel="import"> 
</head> 
<body> 
    <dom-module id="x-el"> 
    <template> 
     <p>path: {{path}}</p> 
     <p>value: {{value}}</p> 
     <button on-click="incrementNumber1">increment number 1</button> 
     <button on-click="incrementNumber2">increment number 2</button>  
    </template> 
    <script> 
     Polymer({ 
     is: 'x-el', 
     properties: { 
      path: { 
      type: String, 
      notify: true 
      }, 
      value: { 
      type: String, 
      notify: true 
      }, 
      number1: { 
      type: Number, 
      value: 0, 
      notify: true 
      }, 
      number2: { 
      type: Number, 
      value: 0, 
      notify: true 
      }, 
     }, 
     observers: [ 
      'onChange(number1.*)', 
      'onChange(number2.*)' 
     ], 
     incrementNumber1: function() { 
      this.number1 += 1; 
     }, 
     incrementNumber2: function() { 
      this.number2 += 1; 
     },   
     onChange: function(changeRecord) { 
      this.path = changeRecord.path; 
      this.value = changeRecord.value; 
     } 
     }); 
    </script> 
    </dom-module> 
    <x-el></x-el> 
</body> 
</html> 

https://jsbin.com/pufexay/edit?html,output

संबंधित मुद्दे