2012-01-08 14 views
34

क्या किसी को RequJS और Ember.js के साथ बहुत सफलता मिली है? एम्बर के रूप में देखकर इसकी संरचना एक वैश्विक वस्तु को सौंपा गया है, मुझे लगता है कि यह वास्तव में आवश्यकता के साथ बट बट कर सकता है। क्या एलएबी.जेएस एम्बर के लिए बेहतर काम करेंगे?Ember.js और RequJS

+0

मैं भी requirejs अन्य पुस्तकालयों और उपाध्यक्ष प्रतिकूल के साथ उपयोग करने के लिए मुश्किल पाया। यही कारण है कि मैंने एक पुस्तकालय बनाया जो उपयोग करने में बहुत आसान है और कोणीय के साथ परीक्षण किया जाता है। नीचे एक डेमो एप्लिकेशन है: gngeorgiev.github.io/Modulerr.js आप मॉड्यूलर.जेएस –

उत्तर

31

EDIT (2012-01-30): मैंने बिटबकेट पर repo में एक और पूर्ण उदाहरण धक्का दिया।

मैंने Ember.js के साथ-साथ डेटाटाइम एडन (github) लोड करने के लिए सफलतापूर्वक RequJS का उपयोग किया है। एम्बर नेमस्पेस स्वयं वैश्विक रहता है, लेकिन मेरे सभी एप्लिकेशन के डेटा, जिसमें एम्बर.एप्लिकेशंस के मेरे उदाहरण शामिल हैं, को RequJS के माध्यम से मॉड्यूल के भीतर रखा जाता है। मैं 'टेक्स्ट!' का उपयोग कर हैंडलबार टेम्पलेट्स भी लोड कर रहा हूं। लगाना।

मुझे अभी तक कोई समस्या नहीं है, लेकिन यह एक पूर्ण आवेदन नहीं है, अवधारणा का सबूत है। यहां बताया गया है कि मैंने इसे कैसे काम किया। मैं सर्वर की आवश्यकता के बिना सीधे सफारी के साथ अपना आवेदन लोड कर सकता हूं। आपको अभी भी क्रोम के साथ लोड करने के लिए एक सर्वर की आवश्यकता होगी, जो जावास्क्रिप्ट को फाइल सिस्टम से फ़ाइलों को लोड नहीं करने देता है।

1) क्योंकि एम्बर.जेएस बीपीएम/स्पेड का उपयोग करता है, मैं रेपो के क्लोन का उपयोग नहीं कर सका। इसके बजाय मैं एक मॉड्यूल के भीतर संकलित संस्करण लपेटकर हूँ:

lib/ember.js:

define(['jquery', 
     'plugins/order!lib/ember-0.9.3.js', 
     'plugins/order!lib/ember-datetime.js'], 
     function() { 
      return Ember; 
}); 

ध्यान दें कि अपने आप में इस वैश्विक दायरे से एंबर छिपा नहीं है। लेकिन मैं चीजों को स्थापित कर रहा हूं ताकि भविष्य में, मैं इसे छिपाने में सक्षम हूं, इस मॉड्यूल पर निर्भर हर दूसरे मॉड्यूल अभी भी काम करेगा।

2) मॉड्यूल तो जैसे एंबर का उल्लेख कर सकते हैं:

एप्लिकेशन/core.js: और

define(['lib/ember'], function(Em) { 
    MyApp = Em.Application.create({ 
     VERSION: "0.0.1" 
    }); 
    return MyApp; 
}); 

यहाँ, "एम" नाम दिया गया है हो सकता है कुछ; यह सीधे वैश्विक चर को संदर्भित नहीं करता है, लेकिन lib/ember.js में परिभाषित मॉड्यूल से आता है।

एप्लिकेशन/टेम्पलेट्स/मेरी-template.handlebars:

MyApp v{{MyApp.VERSION}}. 

एप्लिकेशन/विचारों/मेरी-

3) एंबर द्वारा सुलभ होना करने के लिए, हैंडल पंजीकृत किया जाना है View.js:

define(['lib/ember', 
     'plugins/text!app/templates/my-template.handlebars'], 
     function(Em, myTemplateSource) { 

      Em.TEMPLATES["my-template"] = Em.Handlebars.compile(myTemplateSource); 

      var myView = Em.View.create({ 
       templateName: "my-template"; 
      }); 

      return myView; 
}); 

4) मैं की आवश्यकता है-jquery.js (jQuery और RequJS एक साथ बंडल)।

+0

पर निर्भरता के बिना सभी स्क्रिप्ट को एक साथ जोड़ सकते हैं। आपके दृष्टिकोण का पालन करते समय मुझे यह त्रुटि मिलती है: त्रुटि: मॉड्यूल नाम 'एम्बर -रंटिम 'अभी तक संदर्भ के लिए लोड नहीं किया गया है: _ क्या आपके पास कोई उपाय है कि इसे कैसे हल किया जाए? मैं विचारों से बाहर हूं :) –

+0

हो सकता है कि आपके पास सार्वजनिक रिपो हो जहां मैं आपका नमूना देख सकूं? यह आसान होगा! –

+0

@ क्लाउड-प्रेस्टोर्ट ऐसा लगता है कि MyApp को वैश्विक चर के रूप में घोषित किया गया है क्योंकि आप var कीवर्ड का उपयोग नहीं कर रहे हैं। क्या आप वाकई वैश्विक संदर्भ का उपयोग किए बिना भी काम करते हैं? –

8

एक हैंडलबार फ़ाइल को शामिल करने का एक बेहतर तरीका है जिसमें एकाधिक टेम्पलेट ब्लॉक हो सकते हैं। जो संकलित और एक में उपलब्ध हो सकता है शामिल हैं।

उदाहरण के लिए

: आप निम्नलिखित Handlebars टेम्पलेट फ़ाइल है:

../templates/sample.handlebars

<div><!-- just a filler html tag. Wont show up in your page --> 
    <script type="text/x-handlebars" data-template-name="template1"> 
     Some Html or Template Content ... 
    </script> 
    <script type="text/x-handlebars" data-template-name="template2"> 
     Some Html or Template Content ... 
    </script> 
    <script type="text/x-handlebars" data-template-name="template3"> 
     Some Html or Template Content ... 
    </script> 
</div> 

../views/sampleView.js

define([ 
    'jquery', 
    'lib/ember', 
    'plugins/text!../templates/sample.handlebars'], 
    function($, Em, myTemplateSource) { 

     // Bootstrap method accepts a context element under which all handlebars 
     // template blocks are defined. The filler <div> in this case. 
     // Compiles and assigns to the EM.TEMPLATES hash correctly. 
     Em.Handlebars.bootstrap($(myTemplateSource)); 

     var myView = Em.View.create({ 
      templateName: "template1"; 
     }); 

     return myView; 
}); 
+1

बहुत ही सुरुचिपूर्ण है। एम्बर के लिए जरूरी परियोजनाओं को व्यवस्थित करने के लिए एक "सर्वोत्तम अभ्यास", या अधिक तरीके से आवश्यकता है? मैं वास्तव में अपनी परियोजना को ढूढ़ने का एक तरीका ढूंढ रहा हूं, लेकिन हर समय प्रॉक्सी प्री-लोडिंग सबकुछ होने के साथ मुझे बुरा लगा है। दूसरी ओर, यह उस तरह से स्पष्ट है। – nembleton

3

मैं मैंने अभी एम्बरजेएस + आवश्यकताजेएस के लिए स्टार्टर-किट को जिथब पर अपलोड किया है, आप इसे देख सकते हैं https://github.com/fernandogmar/Emberjs-RequireJS

किसी भी अच्छे सुझाव की अत्यधिक सराहना की जाएगी। मज़े करो!

0

मिमोसा में एम्बर और Requ.js का उपयोग करके कुछ अच्छी उदाहरण परियोजनाएं हैं। चेकआउट करने के लिए यहां एक है: https://github.com/dbashford/mimosa-ember-emblem-templates। इसे जाने के निर्देश इसे रीडमे में हैं।

3

एम्बर सीएलआई ES6 मॉड्यूल सिंटैक्स का समर्थन करता है जो एएमडी को पारदर्शी करता है। ऐसा लगता है कि एम्बर सीएलआई के पीछे एम्बर का उपयोग करने के पसंदीदा तरीके के रूप में समुदाय मिल रहा है।

http://www.ember-cli.com