में इस उदाहरण को आजमा सकते हैं कि भविष्यवाणी क्या है, आप observer pattern के कार्यान्वयन में अपनी समस्या को फिट करने में सक्षम हो सकते हैं। कुछ समय पहले मैंने creating JavaScript objects with observable properties के बारे में एक ब्लॉग पोस्ट लिखा था। यह वास्तव में क्या विधेय है पर निर्भर करता है, लेकिन यह आप इस तरह के कोड के साथ वहाँ जिस तरह से ज्यादातर मिल सकता है:
var observable = createObservable({ propToWatch: false });
observable.observe('propToWatch', function (oldValue, newValue) {
alert('propToWatch has changed from ' + oldValue + ' to ' + newValue);
});
observable.propToWatch(true); // alert pops
बेशक
, यह आपके उदाहरण के लिए overkill हो सकता है। चूंकि यह बाहर स्पष्ट रूप से कभी नहीं सूचीबद्ध है (nb मैं एक बहुत अच्छा ब्लॉगर नहीं हूँ), यहाँ पूरा कोड इस काम बनाने के लिए आवश्यक है:
var createMediator = function() {
var events = {};
return {
subscribe: function (eventName, callback) {
events[eventName] = events[eventName] || [];
events[eventName].push(callback);
},
publish: function (eventName) {
var i, callbacks = events[eventName], args;
if (callbacks) {
args = Array.prototype.slice.call(arguments, 1);
for (i = 0; i < callbacks.length; i++) {
callbacks[i].apply(null, args);
}
}
}
};
};
var createObservable = function (properties) {
var notifier = createMediator(), createObservableProperty, observable;
createObservableProperty = function (propName, value) {
return function (newValue) {
var oldValue;
if (typeof newValue !== 'undefined' &&
value !== newValue) {
oldValue = value;
value = newValue;
notifier.publish(propName, oldValue, value);
}
return value;
};
};
observable = {
register: function (propName, value) {
this[propName] = createObservableProperty(propName, value);
this.observableProperties.push(propName);
},
observe: function (propName, observer) {
notifier.subscribe(propName, observer);
},
observableProperties: []
};
for (propName in properties) {
observable.register(propName, properties[propName]);
}
return observable;
};
मेरे नमूदार वस्तुओं बनाने के लिए एक छोटा सा इवेंट फ्रेमवर्क (createMediator समारोह) का आंतरिक रूप से उपयोग मैंने एक परियोजना के लिए एक बार लिखा था। ( से पहले jQuery समर्थित कस्टम इवेंट्स को महसूस करना। डी ओह!) फिर, यह आपकी ज़रूरत के लिए अधिक हो सकता है या नहीं, लेकिन मैंने सोचा कि यह एक मजेदार हैक था। का आनंद लें!
स्रोत
2010-02-19 14:01:37
भविष्यवाणी क्या है? – SLaks
@ भविष्यवाणी कार्य है, कार्रवाई भी कार्य करती है – zaharpopov
भविष्यवाणी वह स्थिति है जब कार्रवाई को कॉल करने से पहले यह सच होना चाहिए। ** ==> ** मुझे आवाज लगती है। – AxelEckenberger