এটা একটা ভাল প্রশ্ন. ব্যাকবোনটি দুর্দান্ত অনুমানের অভাবের কারণে দুর্দান্ত, তবে এর অর্থ এই নয় যে আপনাকে নিজের মতো জিনিসগুলি কীভাবে প্রয়োগ করতে হবে (কীভাবে সিদ্ধান্ত নেবেন)। আমার নিজের জিনিসগুলি দেখার পরে, আমি দেখতে পাচ্ছি যে আমি (ধরণের) দৃশ্যের 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
ParentView
2 সন্তান মতামত, ঝুলিতে 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
মত একইরকম । তাই:Parent
Child
- আমার দৃশ্যের সূচনা করুন
- আমি যে মডেলটির বিষয়ে যত্নশীল সেটিকে সেটআপ বাঁধে
- আমার মতামত রেন্ডার
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
, শুধুমাত্র মডেল পরিবর্তন আনা হয়েছে তা বজায় রাখে শোনা।
আশা করি এটি কিছুটা সহায়তা করেছে, দয়া করে কোনও কিছু বিভ্রান্ত করছে কিনা বা যথেষ্ট বিশদ বিবরণ না থাকলে দয়া করে আমাকে জানান।