2012-08-25 19 views
13

पर आधारित किसी चयनित सूची में सेट करें, आप टेम्पलेट से वर्तमान मान के साथ चयन नियंत्रण को सही तरीके से पूर्व-पॉप्युलेट कैसे कर सकते हैं?चयनित आइटम को टेम्पलेट मान

मेरे पास एक रिकॉर्ड संपादित करने के लिए एक साधारण रूप है जहां चयनित रिकॉर्ड के मान पूर्व-पॉप्युलेट किए जाते हैं जब फॉर्म दिखाया जाता है। इस तरह यह है कि:

<input type="text" id="project_name_edit" value="{{selected_name}}"> 

लेकिन जहां मैं एक का चयन नियंत्रण मैं टेम्पलेट मूल्य interogate करने में सक्षम हो और सशर्त सही विकल्प के लिए selected='selected' गुण सेट की जरूरत का उपयोग कर रहा हूँ।

<select id="project_status_edit" value="{{selected_status}}"> 
     <option>GOOD</option> 
     <option>BAD</option> 
     <option>UGLY</option> 
</select> 

हैंडलबर्स.जेएस #IF सहायक प्रदान करता है लेकिन यह केवल सच्चाई या झूठा देता है।

मैं शायद इसे विभिन्न तरीकों से हैक कर सकता हूं लेकिन ऐसा लगता है कि एक मानक समाधान होगा जहां एक मानक समाधान होगा।

+0

मैं शायद एक स्क्रिप्ट सहायक 'select' पर' selected' में जोड़ने के लिए प्रयोग करेंगे प्रत्येक 'विकल्प' के भीतर उचित 'विकल्प', या' if'। आप 'चयन' और 'विकल्प' का प्रीकंपाइल भी कर सकते हैं और चित्रित कर सकते हैं कि 'विकल्प चुना गया' (मुझे लगता है)। मुझे नहीं पता कि एक ऐसा निर्माण है जो इसे सादे हैंडलबार्स में सीधे या सुंदर ढंग से टेम्पलेट करता है। –

+0

'# if' (या कोई अन्य सहायक) का उपयोग करना मेरा पहला विचार था, लेकिन मुझे वास्तविक मूल्य प्राप्त करने के बारे में पता नहीं है - क्या यह संभव है/क्या आपके पास कोई उदाहरण है? पूर्व-संकलन काम करेगा लेकिन फिर संरचना के बाहर यह कदम और एक प्रकार के टेम्पलेट के लाभ को हटा देगा और आदर्श रूप से मैं इस तरह के पथ से बचना चाहता हूं। –

+0

आपका मतलब है ' '? –

उत्तर

15

आप एक सहायक का उपयोग कर सकते हैं:

Handlebars.registerHelper('selected', function(foo, bar) { 
    return foo == bar ? ' selected' : ''; 
}); 

जो तुम तो साथ कॉल कर सकते हैं:

<select id="project_status_edit"> 
    <option{{selected foo "GOOD"}}>GOOD</option> 
    <option{{selected foo "BAD"}}>BAD</option> 
    <option{{selected foo "UGLY"}}>UGLY</option> 
</select> 

का उपयोग करना:

{"foo":"UGLY"} 

इसे यहाँ का प्रयास करें:

http://tryhandlebarsjs.com/

हालांकि यह मुझे इसे सहेजने के लिए प्रतीत नहीं होता है। :(

+1

या आप एक सीडीएन से हैंडलबार्स.जेएस खींच सकते हैं और इसे jsfiddle: http://jsfiddle.net/ambiguous/w2wyU/1/ –

+0

@muistooshort - धन्यवाद। मुझे पता था, लेकिन धन्यवाद। ':)' –

+0

मेरे पास मेरी प्रोफ़ाइल में एक गुच्छा बुकमार्क किया गया है 'cuz मैं हर समय जेएस और सीएसएस के सभी विभिन्न बिट्स को ट्रैक करने से थक गया हूं। –

1

मुझे लगभग एक समान समस्या थी, लेकिन मेरे द्वारा गुजरने वाले मूल्य संख्याएं थीं और मेरा मानना ​​है कि मेरे पास उस विशिष्ट मामले के लिए एक क्लीनर समाधान है, जो हैंडलबर्स जादू के आधार पर है।

टेम्पलेट में:

<select name="button-style" id="button-style" _val="{{button_style}}"> 
    <option value="1">Primary Style</option> 
    <option value="2">Secondary Style</option> 
</select> 

आप मूल रूप से विशेषता आप _val के साथ चयनित करना चाहते हैं की संख्या गुजरती हैं। यह केवल ऐसे मामले में उपयोगी होता है जहां प्रत्येक विकल्प में लगातार संख्यात्मक मूल्य होता है। यह भी ध्यान दें, अगर आप इस विशेषता 'मान' को नाम देते हैं, तो इसे डिफ़ॉल्ट रूप से अधिलेखित/अनदेखा कर दिया जाएगा, जो पहले विकल्प का चयन करता है।

अब आप अपने जे एस फ़ाइल में .rendered कॉलबैक में:

Template.templateName.rendered =() -> 
    var btn_style = $('#button-style').attr('_val') 
    $('#button-style option:nth-child(' + btn_style + ')').attr('selected', 'selected') 

यह केवल इस चयन क्षेत्र है जो मूल्य हम चाहते हैं से मेल खाती है में 'वें' विकल्प का चयन।

10

चयनित उत्तर अब और काम नहीं करता है। यह एक पुराना सवाल है, लेकिन मुझे इस साधारण चीज को समझने में कठिन समय था। यहाँ मेरी समाधान है: एचटीएमएल

Handlebars.registerHelper('selected', function(key, value){ 
     return key == value? {selected:'selected'}: ''; 
}); 

उल्का के वर्तमान संस्करण में, हम निर्धारित नहीं कर सकते मूल्य बिना गुण, और उल्का या तो {{#if}} का उपयोग करते हुए अनुमति नहीं है। लेकिन सहायक को पास की गई वस्तुओं को कुंजी = मूल्य जोड़े में परिवर्तित किया जाता है और इंजेक्शन दिया जाता है।

अद्यतन

उपयोग UI.registerHelper के बजाय नया में Handlebars.registerHelper (> 0.8) उल्का के संस्करणों के बाद से Handlebars नाम स्थान का मूल्यह्रास हुआ है (https://github.com/meteor/meteor/wiki/Using-Blaze#handlebars-namespace-deprecated)।

+1

अब जब हम पोस्ट-ब्लेज़ हैं तो आप हैंडलबर्स.registerHelper के बजाय UI.registerHelper का उपयोग कर सकते हैं। – darkadept

+0

यह एक पुरानी टिप्पणी है। मुझे वहां संस्करण संख्या लिखनी चाहिए थी। – channikhabra

1

मैंने यह फ़ंक्शन बनाया है। अपने मामले

selectedOption=function(){ 
     selectedOpt=document.getElementById("yourTagId_Select"); 
     var att = document.createAttribute("selected"); 
     att.value = "selected"; 
     idObj=Session.get("idObj"); 
     var lib = yourCollection.find({'column._id':idObj}).fetch();  
     for (var i = 0; i < selectedOpt.length; i++) { 
      if (selectedOpt[i].value==lib._id._str){    
       return selectedOpt[i].setAttributeNode(att); 
      } 
     }; 


    } 

अपने कार्य

selectedOption फोन के बाद() के लिए अनुकूल;

4

मैं अपने प्रोजेक्ट में निम्नलिखित (मामले में किसी की जरूरत है यह :)

<select class="form-control" id="maritalStatusList" > 
     <option {{selectedMaritalStatus "Single"}}> Single</option> 
     <option {{selectedMaritalStatus "Married"}}> Married</option> 
    </select> 

और इस्तेमाल

Template.editApplicant.helpers({ 
    selectedMaritalStatus: function(key){ 
     return key == this.maritalStatus ? 'selected' : ''; 
    } 
}); 

"this.maritalStatus" वर्तमान दस्तावेज़ से वैवाहिक स्थिति हो जाता है (आवेदक) ।

उपयोग निम्न कोड, आप सभी के लिए

maritalStatus: $('#maritalStatusList').val() 

धन्यवाद डेटाबेस में मूल्य को बचाने के लिए ..

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