2012-10-03 10 views
6

मैं रीढ़ की हड्डी के लिए नया हूं, इसलिए यह संभव है कि मैं ऐसा करने में रीढ़ की हड्डी के सार का उल्लंघन कर रहा हूं। सुझावों की सराहना की जाती है:Backbone.js कई तत्वों को दृश्य संलग्न करता है

मैंने दीवार की प्रणाली बनाई है। तो एक ऐसा फॉर्म है जिसका उपयोग दीवार पर अपडेट पोस्ट करने के लिए किया जा सकता है।

प्रत्येक अपडेट पर उन पर टिप्पणी हो सकती है। मैं एक समय में 10 अपडेट दिखा रहा हूं। तो 10 टिप्पणी फॉर्म हैं।

CommentForm=Backbone.View.extend({ 
initialize:function(messageView){ 

}, 
events:{ 
    "submit":"postcomment" 
}, 
showMessage:function(data){ 
     if(data.success) 
      type="success"; 
       else 
      type="error"; 
      message=data.error?data.error:"Update posted successfully"; 
      $messageContainer=$this.prev(); 
      console.log($this); 
      var html="<div class='alert alert-"+type+"'>"+message+"</div>"; 
      $($messageContainer).html(html); 
}, 
postcomment:function(){ 
     $this=$(this.el); 

     $.post(baseUrl+"/portal/post-comment",$this.serialize(),this.showMessage,"json"); 
     return false; 
} 


    }); 

अब मैं इस प्रकार के रूप में यह करने के लिए एक उदाहरण बनाने के लिए::

commentFormView= new CommentForm({el:$(".comment-form form")}); 

ध्यान दें कि .comment फार्म एक div है तो मैं दृश्य उपलब्ध हैं। ऐसे कई तत्व हैं। इवेंट हैंडलर सभी टिप्पणी फॉर्मों से जुड़ा हुआ है बस ठीक है। लेकिन जब मैं $this=$(this.el); का उपयोग करता हूं तो यह हमेशा पहले टिप्पणी फ़ॉर्म को संदर्भित करता है। मैं इसे कैसे हल करूं। $ (this.el) को टिप्पणी फ़ॉर्म के वर्तमान उदाहरण को संदर्भित करना चाहिए, जहां ईवेंट ट्रिगर किया गया था और पहले एक

उत्तर

7

इस तरह से कुछ का उपयोग करके प्रत्येक तत्व के लिए एक नया दृश्य बनाना होगा।

$(".comment-form form").each(function() { 
    new CommentForm({ el: $(this) }); 
}); 

संपादित एक और (बेहतर?) तरीका नहीं है। क्योंकि ईवेंट हैंडलर अपनी पहली पैरामीटर के रूप में कच्चे घटना हो जाता है, तो आप इस तरह हैंडलर postcomment लिख सकते हैं:

postcomment:function(evt){ 
    // ... 
} 

तो फिर तुम $(evt.srcElement) उपयोग कर सकते हैं वास्तविक तत्व प्राप्त करने के लिए।

postcomment:function(evt){ 
    $this = $(evt.srcElement); 
    // ... 
} 
+1

जब मैं करने की कोशिश की इस 'evt' पैरामीटर srcElement शामिल नहीं किया है, लेकिन मैं के बारे में था 'evt.target' का उपयोग करने के लिए। यह पता चला है कि कुछ ब्राउज़र 'srcElement' और अन्य' originalElement' का समर्थन करते हैं, इसलिए jQuery अच्छी तरह से आंकड़े बताता है और यह आपको 'लक्ष्य' में वापस देता है। एफडब्ल्यूआईडब्ल्यू। –

1

$ ('टिप्पणी-फॉर्म फॉर्म') सभी मिलान करने वाले फॉर्म तत्वों की एक सरणी वापस कर देगा। आपको उस सरणी के माध्यम से पुनरावृत्ति करने की आवश्यकता है और प्रत्येक तत्व के लिए एक दृश्य बनाएं, जैसे dbaseman दिखाया गया है।

इसके अलावा, बजाय

$this=$(this.el) 

रीढ़ विचारों करने का पहले से ही एक jQuery लिपटे एल प्रदान करते हैं:

this.$el 
संबंधित मुद्दे