এটা একটা ভাল প্রশ্ন. ব্যাকবোনটি দুর্দান্ত অনুমানের অভাবের কারণে দুর্দান্ত, তবে এর অর্থ এই নয় যে আপনাকে নিজের মতো জিনিসগুলি কীভাবে প্রয়োগ করতে হবে (কীভাবে সিদ্ধান্ত নেবেন)। আমার নিজের জিনিসগুলি দেখার পরে, আমি দেখতে পাচ্ছি যে আমি (ধরণের) দৃশ্যের 1 এবং দৃশ্য 2 এর মিশ্রণটি ব্যবহার করি I আমি মনে করি না যে চতুর্থ magন্দ্রজালিক দৃশ্য বিদ্যমান কারণ কেবলমাত্র 1 এবং 2 দৃশ্যে আপনি যা কিছু করেন তা অবশ্যই হতে পারে সম্পন্ন.
আমি মনে করি এটি উদাহরণ সহ আমি কীভাবে পরিচালনা করতে চাই তা ব্যাখ্যা করা সবচেয়ে সহজ হবে। বলুন যে আমি এই সাধারণ পৃষ্ঠাটি নির্দিষ্ট দর্শনগুলিতে বিভক্ত করেছি:

বলুন এইচটিএমএল, রেন্ডার হওয়ার পরে, এরকম কিছু:
<div id="parent">
<div id="name">Person: Kevin Peel</div>
<div id="info">
First name: <span class="first_name">Kevin</span><br />
Last name: <span class="last_name">Peel</span><br />
</div>
<div>Phone Numbers:</div>
<div id="phone_numbers">
<div>#1: 123-456-7890</div>
<div>#2: 456-789-0123</div>
</div>
</div>
এইচটিএমএলটি চিত্রের সাথে কীভাবে মেলে তা আশাবাদী pretty
ParentView2 সন্তান মতামত, ঝুলিতে InfoViewএবং PhoneListViewসেইসাথে কিছু অতিরিক্ত আছে divs, যা এক, #name, কিছু সময়ে নির্ধারণ করা প্রয়োজন। PhoneListViewশিশুদের নিজস্ব মতামত, PhoneViewএন্ট্রিগুলির একটি অ্যারে রাখে ।
আপনার আসল প্রশ্ন তাই। আমি ভিউ টাইপের ভিত্তিতে ইনিশিয়েশন এবং রেন্ডারিং হ্যান্ডেল করি। আমি আমার দৃষ্টিভঙ্গি দুটি ধরণের, Parentভিউ এবং Childদর্শনগুলিতে বিভক্ত করি ।
তাদের মধ্যে পার্থক্যটি সহজ, Parentদর্শনগুলি সন্তানের ধারণাগুলি ধারণ করে এবং Childদেখায় না। তাই আমার উদাহরণে, ParentViewএবং PhoneListViewহয় Parent, ভিউ যখন InfoViewএবং PhoneViewএন্ট্রি Childমতামত।
আমি আগে যেমন উল্লেখ করেছি, এই দুটি বিভাগের মধ্যে সবচেয়ে বড় পার্থক্য হ'ল যখন তাদের রেন্ডার করার অনুমতি দেওয়া হয়। একটি নিখুঁত বিশ্বে আমি Parentএকবারে একবারে রেন্ডার করতে চাই views মডেল (গুলি) পরিবর্তিত হলে যে কোনও পুনরায় রেন্ডারিং পরিচালনা করতে তাদের সন্তানের ধারণার উপর নির্ভর করে। Childমতামত, অন্যদিকে, আমি যে কোনও সময় তাদের প্রয়োজন অনুসারে পুনরায় রেন্ডার করার অনুমতি দিচ্ছি কারণ তাদের উপর নির্ভর করে অন্য কোনও মতামত নেই।
আরও কিছুটা বিশদে, Parentদর্শনের জন্য আমি আমার initializeকাজগুলি কয়েকটি জিনিস করতে পছন্দ করি :
- আমার নিজের মতামত শুরু করুন
- আমার নিজের মতামত রেন্ডার করুন
- যেকোন সন্তানের মতামত তৈরি এবং আরম্ভ করুন।
- প্রতিটি সন্তানের আমার ভিউয়ের মধ্যে একটি উপাদান দেখার জন্য বরাদ্দ করুন (যেমন
InfoViewবরাদ্দ করা হবে #info)।
পদক্ষেপ 1 বেশ স্ব স্ব বর্ণনামূলক।
পদক্ষেপ 2, রেন্ডারিংটি সম্পন্ন করা হয়েছে যাতে আমি শিশুকে নির্ধারিত করার আগে শিশুরা যে কোনও উপাদানগুলির উপর নির্ভর করে সেগুলি ইতিমধ্যে উপস্থিত রয়েছে। এটি করার মাধ্যমে, আমি জানি যে সমস্ত শিশু eventsসঠিকভাবে সেট হয়ে যাবে এবং আমি কোনও কিছু পুনঃ-ডেলিগেট না করে চিন্তিত না করে যতবার চাই তাদের ব্লকগুলি পুনরায় রেন্ডার করতে পারি। আমি renderএখানে আসলে কোনও সন্তানের দৃষ্টিভঙ্গি করি না , আমি তাদের নিজের মধ্যে এটি করার অনুমতি দিই initialization।
3 বা 4 পদক্ষেপগুলি আসলে elশিশু দৃষ্টিভঙ্গি তৈরি করার সময় আমি যেভাবে পাস করি ঠিক একই সময়ে পরিচালনা করা হয় । আমি এখানে একটি উপাদানটি পাস করতে চাই বলে আমার মনে হয় যে পিতামাতার উচিত নির্ধারণ করা উচিত যেখানে তার নিজের দৃষ্টিভঙ্গিতে সন্তানের বিষয়বস্তু রাখার অনুমতি রয়েছে।
রেন্ডারিংয়ের জন্য, আমি দেখার জন্য এটি খুব সহজ রাখার চেষ্টা করি Parent। আমি চাই renderফাংশনটি প্যারেন্ট ভিউ রেন্ডার করা ছাড়া আর কিছু না করে। কোনও ইভেন্ট প্রতিনিধি, শিশু দৃষ্টিভঙ্গির কোনও রেন্ডারিং, কিছুই নয়। শুধু একটি সহজ রেন্ডার।
কখনও কখনও এটি যদিও সবসময় কাজ করে না। উদাহরণস্বরূপ, আমার উপরের উদাহরণে উদাহরণস্বরূপ, #nameমডেলটির মধ্যে যে কোনও সময় নাম পরিবর্তন হওয়ার সাথে সাথে উপাদানটি আপডেট করতে হবে। যাইহোক, এই ব্লকটি ParentViewটেম্পলেটটির একটি অংশ এবং একটি উত্সর্গীকৃত Childদর্শন দ্বারা পরিচালিত নয় , তাই আমি এটিকে ঘিরে কাজ করি। আমি এমন একধরণের subRenderফাংশন তৈরি করব যা কেবলমাত্র#name উপাদানটির বিষয়বস্তু প্রতিস্থাপন করে এবং পুরো #parentউপাদানটি ট্র্যাশ করতে হবে না । এটি হ্যাকের মতো মনে হতে পারে তবে পুরো ডিওএমকে পুনরায় রেন্ডারিং এবং উপাদান এবং এ জাতীয় উপাদানগুলির পুনরায় সরবরাহ করার বিষয়ে চিন্তা করার চেয়ে আমি সত্যিই এটি আরও ভাল কাজ করেছি। আমি যদি সত্যিই এটি পরিষ্কার করতে চাই, তবে আমি একটি নতুন Childভিউ তৈরি করব (অনুরূপ InfoView) যা #nameব্লকটি পরিচালনা করবে ।
এখন Childদেখার জন্য , কেবলমাত্র আরও কোনও মতামত তৈরি না করেই দেখার মতামতগুলির initializationমত একইরকম । তাই:ParentChild
- আমার দৃশ্যের সূচনা করুন
- আমি যে মডেলটির বিষয়ে যত্নশীল সেটিকে সেটআপ বাঁধে
- আমার মতামত রেন্ডার
Childভিউ রেন্ডারিং খুব সহজ, শুধু আমার লিখিত সামগ্রী রেন্ডার এবং সেট করে el। আবার, প্রতিনিধি বা এর মতো কোনও কিছুর সাথে গোলযোগ নেই।
আমার ParentViewদেখতে কেমন লাগে তার উদাহরণ কোড এখানে দেওয়া হয়েছে :
var ParentView = Backbone.View.extend({
el: "#parent",
initialize: function() {
// Step 1, (init) I want to know anytime the name changes
this.model.bind("change:first_name", this.subRender, this);
this.model.bind("change:last_name", this.subRender, this);
// Step 2, render my own view
this.render();
// Step 3/4, create the children and assign elements
this.infoView = new InfoView({el: "#info", model: this.model});
this.phoneListView = new PhoneListView({el: "#phone_numbers", model: this.model});
},
render: function() {
// Render my template
this.$el.html(this.template());
// Render the name
this.subRender();
},
subRender: function() {
// Set our name block and only our name block
$("#name").html("Person: " + this.model.first_name + " " + this.model.last_name);
}
});
আপনি আমার বাস্তবায়ন subRenderএখানে দেখতে পারেন । subRenderপরিবর্তে আবদ্ধ পরিবর্তন করে render, আমাকে পুরো ব্লকটি বিস্ফোরণ এবং পুনর্নির্মাণ সম্পর্কে চিন্তা করতে হবে না।
InfoViewব্লকের উদাহরণ কোড এখানে :
var InfoView = Backbone.View.extend({
initialize: function() {
// I want to re-render on changes
this.model.bind("change", this.render, this);
// Render
this.render();
},
render: function() {
// Just render my template
this.$el.html(this.template());
}
});
বাইন্ডগুলি এখানে গুরুত্বপূর্ণ অংশ। আমার মডেলটির সাথে আবদ্ধ হয়ে আমাকে renderনিজেকে নিজে কল করা নিয়ে কখনই চিন্তা করতে হবে না । যদি মডেলটি পরিবর্তন হয় তবে এই ব্লকটি অন্য কোনও দর্শন প্রভাবিত না করে নিজেই পুনরায় রেন্ডার করবে।
এর PhoneListViewঅনুরূপ হবে ParentView, সংগ্রহগুলি পরিচালনা করতে আপনার initializationএবং renderফাংশন দুটিতেই কেবল আরও কিছু যুক্তি প্রয়োজন । আপনি কীভাবে সংগ্রহটি পরিচালনা করছেন তা আপনার পক্ষে নির্ভরযোগ্য তবে আপনাকে কমপক্ষে সংগ্রহের ইভেন্টগুলি শুনতে হবে এবং আপনি কীভাবে রেন্ডার করতে চান তা সিদ্ধান্ত নিতে হবে (সংযোজন / সরিয়ে ফেলুন, বা পুরো ব্লকটি পুনরায় রেন্ডার করুন)। আমি ব্যক্তিগতভাবে নতুন মতামত সংযোজন এবং পুরানোগুলি সরাতে চাই, পুরো দর্শনটিকে পুনরায় রেন্ডার না করে।
PhoneViewপ্রায় অভিন্ন হতে হবে InfoView, শুধুমাত্র মডেল পরিবর্তন আনা হয়েছে তা বজায় রাখে শোনা।
আশা করি এটি কিছুটা সহায়তা করেছে, দয়া করে কোনও কিছু বিভ্রান্ত করছে কিনা বা যথেষ্ট বিশদ বিবরণ না থাকলে দয়া করে আমাকে জানান।