2011-06-18 7 views
5

मैं एक प्रकार की रूपांतरण तालिका के साथ कैनवास से संबंधित कक्षा का निर्माण कर रहा हूं। रूपांतरण तालिका उपयोगकर्ता द्वारा संपादित की जा सकती है। (वास्तव में प्रासंगिक नहीं है, लेकिन शायद आप को पता है क्यों चाहते हैं):डॉट्स के बिना एक वैरिएबल (parent.child.grandchild) का पोलैंड एक्सेस करें और ब्रैकेट्स की एक जोड़ी

cLayout = function(option) { 
    //obtaining the canvas (el) here 
    this.setup = function(option) { 
     t=this.table; 
     for (var p in t) 
     { 
      el[t[p][0]] = option[p]||t[p][1] 
     } 
    } 
    this.setup(option) 
} 

cLayout.prototype.table = { 
    width:[['style']['width'],"100%"], 
    height:['style'['height'],"100%"], 
    bg:[['style']['backgroundColor'],""], 
    position:[['style']['position'],"absolute"], 
    left:['style'['left'],"0px"], 
    top:['style'['left'],"0px"] 
} 

उदाहरण:

var b = new cLayout({left:'10%',width:'90%'}) 

रियल प्रश्न:

आम तौर पर, मैं करने के लिए el['style']['width'] का उपयोग करेंगे el.style.width सेट करें। लेकिन मैं ब्रैकेट की दूसरी जोड़ी के बिना el[something] का उपयोग करना चाहता हूं: मैं चाहता हूं कि संपत्ति का नाम पूरी तरह से परिवर्तनीय हो (मैं भी el['innerHTML'] सेट करने में सक्षम होना चाहता हूं)। तो, क्या a[b][c] का उपयोग किये बिना a[b] का उपयोग करके पोते को पाने का कोई तरीका है?

पीएस बेशक, मैं eval का उपयोग नहीं करना चाहता हूँ।

+0

यह '[[शैली'] ['चौड़ाई'], "100%"] 'समझ में नहीं आता है। यह '[' शैली ']' सरणी की 'चौड़ाई' संपत्ति तक पहुंचने का प्रयास करेगा, जो 'अपरिभाषित' है। तो आपको क्या मिलता है '[अपरिभाषित, "100%"] '। '['शैली' ['बाएं']," 0px "] के लिए समान। –

+0

मुझे पता है। यह वही है जो मैं चाहता हूं, लेकिन यह निश्चित रूप से काम नहीं करता है। – bopjesvla

उत्तर

3

नहीं, यह संभव नहीं है। यदि आपके पास घोंसला वाली वस्तुएं हैं, तो आप केवल एक स्तर को छोड़ नहीं सकते हैं।

आप एक सहायक समारोह हालांकि, जो "child.grandchild" इस तरह की स्ट्रिंग लेता है और इसी संपत्ति सेट लिख सकते हैं: (। तुम भी परीक्षण करना चाहिए कि क्या एक खास संपत्ति उपलब्ध है) इसके बाद

function setProp(obj, prop, val) { 
    var parts = prop.split('.'); 
    while(parts.length > 1) { 
     obj = obj[parts.shift()]; 
    } 
    obj[parts.shift()] = val; 
} 

अपने कोड इस तरह दिख सकता है:

var cLayout = function(option) { 
    //obtaining the canvas (el) here 
    this.setup = function(option) { 
     for(var p in this.table) { 
      setProp(el, this.table[p][0], option[p]||t[p][1]); 
     } 
    } 
    this.setup(option) 
} 

cLayout.prototype.table = { 
    width:['style.width',"100%"], 
    height:['style.height',"100%"], 
    //... 
} 
+0

आप कमाल कर रहे हैं! – bopjesvla

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