मैं रीढ़ की हड्डी के लिए बिल्कुल नया हूं और मैं ज़ोंबी विचारों के इन्स और बहिष्कार को समझने की कोशिश करता हूं।बैकबोन ज़ोंबी विचार और अच्छी प्रैक्टिस
एक ज़ोंबी इस article के अनुसार, यह है:
जब हम घटनाओं के माध्यम से एक साथ वस्तुओं के लिए बाध्य लेकिन हम उन्हें अनबाइंडिंग परेशान नहीं है। जब तक ये वस्तुएं एक साथ बंधी हुई हों, और हमारे ऐप कोड में उनमें से कम से कम एक संदर्भ है, तो उन्हें साफ़ नहीं किया जाएगा या कचरा एकत्र नहीं किया जाएगा। परिणामस्वरूप स्मृति रिसाव फिल्मों की लाश की तरह हैं - अंधेरे कोनों में छिपकर, बाहर निकलने और हमें दोपहर के भोजन के लिए खाने का इंतजार कर रहे हैं।
उपर्युक्त आलेख एक ऐसा ऑब्जेक्ट बनाने का सुझाव देता है जो दृश्यों के बीच संक्रमण को प्रबंधित करता है और फिर दृश्य को हटाने और अनदेखा करने के लिए एक करीबी फ़ंक्शन को लागू करने के लिए सुझाव देता है।
कहा जा रहा है कि स्थिति के आधार पर, उस करीबी कार्य को कहां से कॉल करें?
मैं बच्चे के दृश्य का पता लगाने के लिए अपने मूल दृश्य के प्रारंभिक ब्लॉक में एक संपत्ति जोड़ता हूं। इस तरह से मैं इसे एक नए द्वारा प्रतिस्थापित करने से पहले .remove() पर कॉल करने में सक्षम हूं। क्या यह अच्छा अभ्यास है या क्या कोई बेहतर तरीका है?
मैं भी समझ में नहीं आता क्यों el
को परिभाषित करने और फिर
this.$el.html(this.template(this.model.attributes));
साथ प्रतिपादन मुझे देखने निकल करने के लिए काम करता है, जबकि यह रूप में
$('#sportsManDetails').html(this.$el.html(this.template(this.model.attributes)));
उदाहरण के लिए, मैंने अभी एक साधारण ऐप बनाया है जो खिलाड़ियों के नामों की एक सूची प्रदर्शित करता है और जो किसी नाम पर क्लिक करते समय अधिक जानकारी दिखाता है।
यहाँ कोड और एक काम कर fiddle है:
एचटीएमएल
<script id="nameListTemplate" type="text/template">
<%= first %> <%= last %>
</script>
<script id="sportsManDetailsTemplate" type="text/template">
<ul>
<li><%= first %></li>
<li><%= last %></li>
<li><%= age %></li>
<li><%= sport %></li>
<li><%= category %></li>
</ul>
<button class="test">Test</button>
</script>
<div id="sportsMenName"></div>
<div id="sportsManDetails"></div>
जे एस
मॉडल और संग्रह
var app = app || {};
app.SportsManModel = Backbone.Model.extend({});
app.SportsMenCollection = Backbone.Collection.extend({
model: app.SportsManModel
});
NameView
app.NameView = Backbone.View.extend({
tagName: 'li',
className: 'sportsMan',
template: _.template($('#nameListTemplate').html()),
initialize: function(){
this.sportsManDetailsView;
},
events: {
'click': 'showSportsManDetails'
},
showSportsManDetails: function(e){
if (typeof this.sportsManDetailsView !== 'undefined'){
this.sportsManDetailsView.remove();
}
this.sportsManDetailsView = new app.SportsManDetailsView({
model: this.model
})
},
render: function(){
this.$el.append(this.template(this.model.attributes));
return this;
}
});
NameListView
app.NameListView = Backbone.View.extend({
el: '#sportsMenName',
initialize: function(sportsMen){
this.collection = new app.SportsMenCollection(sportsMen);
this.render();
},
render: function(){
this.collection.each(function(sportsMen){
this.renderContact(sportsMen);
}, this);
},
renderContact: function(sportsMen){
var nameView = new app.NameView({
model: sportsMen
});
this.$el.append(nameView.render().el);
}
});
SportsManDetailsView
app.SportsManDetailsView = Backbone.View.extend({
// doesn't work if I use el in conjunction with
// this.$el.html(this.template(this.model.attributes));
// el: '#sportsManDetails',
template: _.template($('#sportsManDetailsTemplate').html()),
initialize: function(){
this.render();
},
events: {
'click .test': 'test'
},
test: function(){
alert('test');
},
render: function(){
// that does not work
//this.$el.html(this.template(this.model.attributes));
// is this good practice?
$('#sportsManDetails').html(this.$el.html(this.template(this.model.attributes)));
}
});
ऐप।js
var sportsMen = [
{first: 'Quentin', last: 'Tarant', age: '34', sport: 'bike', category: '- 90kg'},
{first: 'Aymeric', last: 'McArthur', age: '54', sport: 'jetski', category: '200HP'},
{first: 'Peter', last: 'TheFat', age: '45', sport: 'curling', category: 'dunno'},
{first: 'Charles', last: 'Martel', age: '21', sport: 'Moto', category: 'MX 250cc'},
];
$(function(){
new app.NameListView(sportsMen);
});
यह वास्तव में है कमाल! तुमने मुझे इस मामले पर प्रबुद्ध किया। बहुत बहुत धन्यवाद – Buzut
कोई समस्या नहीं! आपने एक अच्छा सवाल पूछा है कि एक अच्छी व्याख्या के लिए। आपकी रीढ़ की हड्डी पर शुभकामनाएं! – ncksllvn
मुझे नहीं लगता कि यह दोषपूर्ण होगा, लेकिन यह इसका हिस्सा है खेल। फिर से धन्यवाद :) – Buzut