2013-01-30 9 views
11

में फॉर्म प्रमाणीकरण मैं बस सोच रहा हूं कि एम्बरजेएस में फॉर्म मान्य करने के लिए सामान्य पैटर्न क्या है? मेरे App.IndexView के लिए मेरे पास एक फॉर्म है और जब आप सबमिट बटन पर क्लिक करते हैं तो लक्ष्य को सेट पर सेट किया जाता है, इसलिए मैं कुछ सत्यापन कर सकता हूं। यह उस बिंदु तक बढ़िया काम करता है जहां मुझे उन क्षेत्रों के साथ कुछ करने की ज़रूरत है जिनमें त्रुटियां हैं। मैं केवल त्रुटियों वाले फ़ील्ड में एक वर्ग जोड़ना चाहता हूं लेकिन वास्तव में यह सुनिश्चित नहीं करता कि इसे कैसे किया जाए। क्या इंडेक्स व्यू फॉर्म को मान्य कर सकता है या क्या मुझे प्रत्येक फ़ील्ड के लिए एक दृश्य बनाना चाहिए जो धुंध पर अपने स्वयं को मान्य करता है? मेरे इंडेक्स व्यू में मेरे पास नीचे है।एम्बरजेएस

App.IndexView = Ember.View.extend 


    create: (model) -> 

    valid = @_validate model 

    if valid is true 
     @get('controller').send 'createUser' 
    else 
     # HANDLE THE FIELDS WITH ERRORS 

    _validate: (model) -> 

    invalid = [] 
    validations = { 
     firstName: @_validateString model.get 'firstName' 
     lastName: @_validateString model.get 'lastName' 
     email: @_validateEmail model.get 'email' 
     password: @_validatePassword model.get 'password' 
     accountType: @_validateString model.get 'accountType' 
    } 

    # This will get all of the values then runs uniq to see if the 
    # form is valid 
    validForm = _.chain(validations).values().uniq().value() 

    if validForm.length is 1 and validForm[0] 
     true 
    else 
     # other wise build up an array of the fields with issues 
     for field, val of validations 
     if val is false 
      invalid.push field 

     invalid 

    _validateString: (str) -> 
    return false unless str 
    if str isnt '' then true else false 

    _validateEmail: (str) -> 
    pattern = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ 
    pattern.test str 

    _validatePassword: (str) -> 
    return false unless str 
    if str.length >= 6 then true else false 

और टेम्पलेट

<div class="row"> 
    <div class="span12"> 
    <div class="signup"> 
     <form class="form-horizontal offset3"> 
     <div class="control-group"> 
      <label class="control-label" for="first_name">First Name</label> 
      <div class="controls"> 
      {{ view Ember.TextField placeholder="First Name" required="true" valueBinding='firstName' name='first_name' viewName='firstNameField'}} 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label" for="last_name">Last Name</label> 
      <div class="controls"> 
      {{ view Ember.TextField placeholder="Last Name" required="true" valueBinding='lastName' name='last_name' viewName='lastNameField'}} 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label" for="email">Email</label> 
      <div class="controls"> 
      {{ view Ember.TextField placeholder="Email" required="true" type="email" valueBinding='email' name='email' viewName='emailField'}} 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label" for="password">Password</label> 
      <div class="controls"> 
      {{ view Ember.TextField placeholder="Password" required="true" type="password" valueBinding='password' name='password' viewName='passwordField'}} 
      </div> 
     </div> 
     <div class="control-group"> 
      <label class="control-label" for="">Account Type</label> 
      <div class="controls"> 
      {{#view Ember.RadioButtonGroup name="accountType" required="true" valueBinding="accountType"}} 
       <label class="radio"> 
       {{view RadioButton checked='false' value="landlord"}} 
       Landlord 
       </label> 
       <label class="radio"> 
       {{view RadioButton checked='false' required="true" value="tenant"}} 
       Tenant 
       </label> 
      {{/view}} 
      </div> 

     </div> 
     <div class="control-group"> 

      <div class="controls"> 
      <input class="btn btn-primary" {{action create model target='view' }} type="submit" value="Sign Up"> 
      </div> 

     </div> 
     </form> 

    </div> 

    </div> 

</div> 

उत्तर

23

मैं सिर्फ EmberJS में रूपों को मान्य करने के लिए क्या सामान्य पद्धति सोच रहा हूँ?

उपयोग में कई पैटर्न प्रतीत होते हैं। यह यथासंभव सटीक रूप से निर्भर करता है कि सामान्य रणनीति को यथासंभव व्यू परत से व्यवसाय तर्क को दूर रखना है। ये कुछ लिंक है कि उपयोगी साबित हो सकता है:

  • validations-in-emberjs-application.html नियंत्रक स्तर पर मान्यता प्रदर्शन की सिफारिश की, विचारों के साथ जब फोकस परिवर्तन मान्यता को गति प्रदान करने के लिए इस्तेमाल कर रहे हैं। यह स्क्रीनकास्ट दर्शाता है कि इस पैटर्न का उपयोग कुछ सरल फॉर्म-फ़ील्ड को सत्यापित करने के लिए कैसे किया जा सकता है।

  • Asynchronous-Form-Field-Validation-With-Ember कुछ पुन: प्रयोज्य घटक प्रदान करता है जिनका उपयोग दृश्य परत पर सरल सत्यापन करने के लिए किया जा सकता है।

  • ember-validations एक पुस्तकालय है कि किसी भी एंबर-वस्तु

को सक्रिय रिकॉर्ड शैली मान्यता क्षमताओं को जोड़ने के लिए मेरी App.IndexView मैं एक रूप है के लिए इस्तेमाल किया जा सकता और सबमिट करें जब आप क्लिक है लक्ष्य को सेट पर सेट करें ताकि मैं कुछ सत्यापन कर सकूं। यह उस बिंदु तक बढ़िया काम करता है जहां मुझे उन क्षेत्रों के साथ कुछ करने की ज़रूरत है जिनमें त्रुटियां हैं। मैं सिर्फ एरो के क्षेत्र में एक वर्ग जोड़ना चाहता हूं लेकिन वास्तव में यह सुनिश्चित नहीं करता कि इसे कैसे किया जाए।

चूंकि आप कई फ़ील्ड को एक बार सत्यापित करने के लिए देख रहे हैं, तो यह इस सत्यापन तर्क को नियंत्रक में स्थानांतरित करने के लिए और अधिक समझ सकता है। किसी भी तरह से, आम तौर पर आप वर्ग एक संपत्ति के लिए किसी दिए गए क्षेत्र के लिए जिम्मेदार बताते हैं इस प्रकार बाँध होगा:

<div class="controls" {{bindAttr class=firstNameError:error:success}}> 
    {{ view Ember.TextField placeholder="First Name" required="true" valueBinding='firstName' name='first_name' viewName='firstNameField'}} 
</div> 

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

क्या इंडेक्स व्यू फॉर्म को मान्य करना चाहिए या क्या मुझे प्रत्येक फ़ील्ड के लिए एक दृश्य बनाना चाहिए जो धुंध पर अपने स्वयं को मान्य करता है?

यह वास्तव में इस बात पर निर्भर करता है कि आप उपयोगकर्ता अनुभव की तरह क्या चाहते हैं। एफडब्ल्यूआईडब्ल्यू मेरा वोट ऑन-ब्लर के साथ जाना है।

+0

मुझे सही दिशा में इशारा करते हुए के लिए धन्यवाद। – Chad

+0

कोई समस्या नहीं, उम्मीद है कि मदद करता है। –

+0

यदि आप अपना स्वयं का एपीआई लिखते हैं जो एक अलग सर्वर पर रहता है, तो आप सबमिट किए गए डेटा पर एपीआई के भीतर सत्यापन भी करना चाहते हैं, सही? यह सत्यापन की नकल है लेकिन डेटा को सुरक्षित रखने के लिए आवश्यक है, सही? – Chris