2013-01-18 15 views
5

तुम्हें पता है, AngularJS में, तार्किक का सबसे $scope पर आधारित हैं:प्रोटोटाइप तरीकों और चर के साथ AngularJS काम करने देने के लिए क्या यह संभव है

function Ctrl($scope) { 
    $scope.name = "Freewind"; 
    $scope.hello = function() { 
     alert($scope.name); 
    } 
    $scope.method1 = function() {} 
    $scope.method2 = function() {} 
    $scope.method3 = function() {} 
    $scope.method4 = function() {} 
    $scope.method5 = function() {} 
} 

अब मैं AngularJS कोड उत्पन्न करने के लिए haxe उपयोग कर रहा हूँ, यह करता है, तो काम करता है मेरे कोड है:

class Ctrl { 
    public function new(scope:Scope) { 
     scope.name = "Freewind"; 
     scope.hello = function() { 
     alert(scope.name); 
     } 
     scope.method1 = function() {} 
     scope.method2 = function() {} 
     scope.method3 = function() {} 
     scope.method4 = function() {} 
     scope.method5 = function() {} 
    } 
} 

typedef Scope = { 
    name:String, 
    hello:Void->Void, 
    method1: Void->Void, 
    method2: Void->Void, 
    method3: Void->Void, 
    method4: Void->Void, 
    method5: Void->Void 
} 

लेकिन मैं haxe के वर्ग प्रणाली से लाभान्वित होना चाहते हैं (कोड आसान और अधिक स्पष्ट हो सकता है), इसे पसंद घोषित करने के लिए:

class Scope { 
    public var name:String; 
    public function hello() {} 
    public function method1() {} 
    public function method2() {} 
    public function method3() {} 
    public function method4() {} 
    public function method5() {} 
} 

फिर AngularJS की $scope साथ Scope वर्ग संबद्ध करने के लिए एक रास्ता खोजने।

लेकिन उत्पन्न Scope haxe से प्रोटोटाइप का उपयोग कर रहे हैं:

Scope = function(); 
Scope.prototype.name = "something"; 
Scope.prototype.hello = function() {} 
Scope.prototype.method1 = function() {} 
Scope.prototype.method2 = function() {} 
Scope.prototype.method3 = function() {} 
Scope.prototype.method4 = function() {} 
Scope.prototype.method5 = function() {} 

इस मामले में, मैं इसके साथ AngularJS काम करने देने के लिए एक समाधान नहीं मिल रहा।

क्या कोणीय को प्रोटोटाइप के साथ काम करने देना संभव है, इसलिए यह हैक्स क्लास सिस्टम (अन्य भाषाओं जैसे कॉफ़ीस्क्रिप्ट/टाइपस्क्रिप्ट जिसमें कक्षा समर्थन है) के साथ काम कर सकते हैं?

+0

कर कि, यदि आप कोड की पुन: प्रयोज्य बिट्स चाहते हैं, ले जाने के अपने कोई उद्देश्य नहीं है सेवाओं में तरीकों। क्या angularJS कॉल नियंत्रक एमवीसी नियंत्रक नहीं है, यह एमवीवीएम डिजाइन पैटर्न में एक ViewModel है। सच्चे नियंत्रक निर्देशों में हैं। – mpm

उत्तर

2

इस सवाल का एक वास्तविक जवाब होने के लिए, एक है कि उल्लेख करना चाहिए अब इस पुस्तकालय समस्या का हल: https://github.com/freewind/HaxeAngularSupport;)

+0

इस मैक्रो का उपयोग 2 दिनों के लिए करने के बाद, अब मैं इसकी अनुशंसा नहीं करता हूं। जब मैं इस तरह से कोड लिखता हूं, तो मैं सोचना बंद नहीं कर सकता "जेएस कोड क्या उत्पन्न करेगा? क्या यह सही है"? यह बहुत थक गया है। और यह भी छोटी त्रुटियों को पेश किया गया, जिसे ठीक किया जा सकता है, लेकिन हमें कोडिंग के लिए और नियमों की आवश्यकता है। – Freewind

+0

@Freewind: आप काम करने के लिए इस पुस्तकालय चाहते हैं, आप समय निवेश और क्षेत्र में यह परीक्षण करने के लिए की आवश्यकता होगी। आपको कुछ दिनों के बाद हार नहीं माननी चाहिए। यह देखते हुए कि लाइब्रेरी कितनी युवा है और मैक्रोज़ के लिए आप कितने नए हैं, यह एक सम्मानजनक आकार में है। आपको इसे परिष्कृत करने की आवश्यकता है और - सबसे महत्वपूर्ण बात - परीक्षण जोड़ें। इस तरह आप जान लेंगे कि यह सही है। सॉफ्टवेयर का एक ठोस टुकड़ा बनाना एक प्राप्य लक्ष्य है।आपकी सलाह के लिए – back2dos

+0

धन्यवाद। मैं उस हक्स बग को ठीक करने की प्रतीक्षा कर रहा हूं, फिर मेरा पहला दृष्टिकोण आज़माएं। – Freewind

1

स्कोप के निर्माता को बंद करने के भीतर घोषित किया जाता है, तो आप इसे करने के लिए आसान पहुँच नहीं है ... लेकिन (!) जावास्क्रिप्ट निर्माता सही किसी भी मौजूदा वस्तु से दूर आप के लिए उपलब्ध है।

सैद्धांतिक रूप से, आप $ rootScope के निर्माता मिल सकता है, यह प्रोटोटाइप है बदल सकता है, और है कि किसी भी बाद में बनाए कार्यक्षेत्र में परिवर्तन करना चाहिए। हालांकि, आप शायद अपने एप्लिकेशन मॉड्यूल पर .run() या .config() में ऐसा करना चाहते हैं।

app.run(function($rootScope) { 
    $rootScope.constructor.prototype.foo = 'Set from prototype'; 
}); 

It works and here's the plunker

हाउवर: आपको शायद यह करने की आवश्यकता नहीं है। एकमात्र कारण मैं आपको ऐसा करने की आवश्यकता हो सकती है कि सोच सकता है कुछ किनारे मामले में जहां आप वाकई कुछ समारोह या संपत्ति एक गुंजाइश पर उपलब्ध था बनाने के लिए आवश्यक है, भले ही वह एक अलग गुंजाइश था (के रूप में में से एक था मैंने जुड़े प्लंकर में निर्देश)।

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

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