2013-01-12 10 views
11

मैं एक गणना की गई संपत्ति को गैर-एम्बर ग्लोबल का निरीक्षण करना चाहता हूं: स्थानीय स्टोरेज में एक विशिष्ट कुंजी। क्या यह संभव है? निम्नलिखित में कटौती नहीं होती है:गैर-एम्बर ग्लोबल्स का निरीक्षण करें

someProperty:function(){ 
    //some functionality 
}.property('localStorage.someKey') 

क्या ऐसा करना संभव है जो मैं सीधे करने की कोशिश कर रहा हूं?

उत्तर

26

सामान्य रूप से, आप नियमित जावास्क्रिप्ट ऑब्जेक्ट्स को ठीक से देख सकते हैं।

var pojo = {}; 

var MyObject = Ember.Object.extend({ 
    bigEyeballs: function() { 
    var O_O = this.get('pojo.O_O'); 
    if (O_O) { return O_O.toUpperCase(); } 
    }.property('pojo.O_O') 
}); 

var obj = MyObject.create({ pojo: pojo }); 
console.log(obj.get('bigEyeballs')); 

Ember.set(pojo, 'O_O', "wat"); 
console.log(obj.get('bigEyeballs')); 

आप this JSBin में यह काम कर देख सकते हैं: आप सिर्फ उन्हें संशोधित करने के लिए Ember.get और Ember.set उपयोग करने के लिए की जरूरत है।

स्थानीय संग्रहण एक अलग मामला है, क्योंकि यह वास्तव में एक सामान्य जावास्क्रिप्ट ऑब्जेक्ट नहीं है। आप स्थानीय भंडारण के चारों तरफ छोटे एंबर आवरण बना सकते हैं और उपयोग करें कि अवलोकन के लिए:

var LocalStorage = Ember.Object.extend({ 
    unknownProperty: function(key) { 
    return localStorage[key]; 
    }, 

    setUnknownProperty: function(key, value) { 
    localStorage[key] = value; 
    this.notifyPropertyChange(key); 
    return value; 
    } 
}); 

var storage = new LocalStorage(); 

var MyObject = Ember.Object.extend({ 
    bigEyeballs: function() { 
    var O_O = this.get('pojo.O_O'); 
    if (O_O) { return O_O.toUpperCase(); } 
    }.property('pojo.O_O') 
}); 

var obj = MyObject.create({ pojo: storage }); 

console.log(obj.get('bigEyeballs')); 

Ember.set(storage, 'O_O', "wat"); 
console.log(obj.get('bigEyeballs')); 

आप इस JSBin पर रहते हैं देख सकते हैं।

दोनों मामलों में, महत्वपूर्ण बात यह है कि आपको एम्बर-जागरूक सेटिंग का उपयोग करना होगा और इन गुणों का निरीक्षण करने के लिए प्राप्त करना होगा।