সংক্ষিপ্তসার: গতিশীলভাবে মডেল ডেটা সহ দৃশ্য বৈশিষ্ট্যগুলি সেট করুন
http://jsfiddle.net/5wd0ma8b/
var View = Backbone.View.extend( {
attributes : function () {
return {
class : this.model.get( 'item_class' ),
id : this.model.get( 'item_id' )
};
}
} );
var item = new View( {
model : new Backbone.Model( {
item_class : "nice",
item_id : "id1"
} )
} );
এই উদাহরণটি ধরে নিয়েছে যে আপনি ব্যাকবোনকে আপনার জন্য একটি ডিওএম উপাদান তৈরি করতে দিচ্ছেন।
attributes
পরে বৈশিষ্ট্য দেখতে কন্সট্রাকটর প্রেরণ নির্ধারণ করা হয় পদ্ধতি বলা হয় (এই ক্ষেত্রে, model
), আপনি পরিবর্তনশীল মডেল ডেটার সাথে বৈশিষ্ট্যাবলী সামনে দাঁড়া সৃষ্টি সেট করতে সক্ষম হবেন el
।
অন্যান্য উত্তরগুলির বিপরীতে: ভিউ ক্লাসে হার্ড-কোড অ্যাট্রিবিউট মানগুলি গতিশীলভাবে মডেল ডেটা থেকে সেট করে না; render()
অ্যাটর ভ্যালস সেট না হওয়া পর্যন্ত অপেক্ষা করবেন না ; বারবার প্রতিটি কলে এট্রে ভ্যালস সেট করে না render()
; অযৌক্তিকভাবে ডিওএম উপাদানটিতে অ্যাটর ভ্যালস সেট করে না।
নোট করুন যে কল করার সময় শ্রেণি নির্ধারণ করা Backbone.View.extend
বা কোনও ভিউ কনস্ট্রাক্টর (উদাহরণস্বরূপ new Backbone.View
), আপনাকে ডিওএম সম্পত্তি নাম ব্যবহার করতে হবে className
, তবে attributes
হ্যাশ / পদ্ধতির মাধ্যমে সেট করা থাকলে (এই উদাহরণ হিসাবে) আপনাকে বৈশিষ্ট্যটির নাম ব্যবহার করতে হবে class
,।
ব্যাকবোন 0.9.9 হিসাবে:
যখন কোনো দৃশ্য ঘোষণা ... el
, tagName
, id
এবং className
এখন ফাংশন হিসাবে সংজ্ঞায়িত করা যেতে পারে, যদি আপনি চান তাহলে তাদের মান রানটাইম এ নির্ধারণ করতে হবে।
আমি এটি উল্লেখ করেছি যদি এমন কোনও পরিস্থিতি থাকে যেখানে attributes
চিত্রিত হিসাবে কোনও পদ্ধতি ব্যবহারের বিকল্প হিসাবে এটি কার্যকর হয় ।
একটি বিদ্যমান উপাদান ব্যবহার করে
যদি আপনি একটি বিদ্যমান উপাদান ব্যবহার করে থাকেন (উদাহরণস্বরূপ el
ভিউ কনস্ট্রাক্টরের কাছে যাচ্ছেন ) ...
var item = new View( { el : some_el } );
... তাহলে attributes
উপাদানটিতে প্রয়োগ করা হবে না। পছন্দসই বৈশিষ্ট্য ইতিমধ্যে উপাদান সেট নাও হয়, অথবা আপনি আপনার দৃশ্য শ্রেণী এবং অন্য একটি অবস্থানে যে ডেটা প্রতিলিপি করতে চাই না, তাহলে আপনি একটি অ্যাড করতে পারেন initialize
প্রযোজ্য আপনার ভিউ কন্সট্রাকটর করার পদ্ধতি attributes
থেকে el
। এরকম কিছু (ব্যবহার করে jQuery.attr
):
View.prototype.initialize = function ( options ) {
this.$el.attr( _.result( this, 'attributes' ) );
};
el
মোড়ক এড়ানো, রেন্ডারিং এর ব্যবহার
বেশিরভাগ উদাহরণগুলিতে আমি দেখেছি, ভিউ এর এল একটি অর্থহীন মোড়কের উপাদান হিসাবে কাজ করে যার মধ্যে একজনকে ম্যানুয়ালি 'শব্দার্থিক' কোড লিখতে হয়।
view.el
"অর্থহীন মোড়কের উপাদান" হওয়ার কোনও কারণ নেই । আসলে, এটি প্রায়শই ডিওএম কাঠামোটিকে ভেঙে দেয়। <li>
উদাহরণস্বরূপ যদি কোনও ভিউ ক্লাস কোনও উপাদানকে <li>
উপস্থাপন করে তবে এটিকে একটি হিসাবে রেন্ডার করা দরকার - এটিকে <div>
অন্য কোনও উপাদান হিসাবে উপস্থাপন করা সামগ্রীর মডেলটিকে ভেঙে দেবে। আপনি সম্ভবত সঠিকভাবে আপনার ভিউ এর উপাদান স্থাপনের (যেমন বৈশিষ্ট্য ব্যবহার ফোকাস করতে চাইবেন tagName
, className
এবং id
) এবং তারপর তার রেন্ডারিং বিষয়বস্তু তারপরে।
আপনার ব্যাকবোন ভিউ অবজেক্টগুলি কীভাবে DOM এর সাথে ইন্টারঅ্যাক্ট করবেন তার বিকল্পগুলি খোলা রয়েছে। প্রাথমিক দুটি প্রাথমিক পরিস্থিতি রয়েছে:
আপনি একটি বিদ্যমান ডোম উপাদান একটি ব্যাকবোন ভিউতে সংযুক্ত করতে পারেন।
আপনি ব্যাকবোনকে একটি নতুন উপাদান তৈরি করতে অনুমতি দিতে পারেন যা দস্তাবেজ থেকে সংযোগ বিচ্ছিন্ন হয়ে গেছে, তারপরে কোনওভাবে এটি নথিতে সন্নিবেশ করানো উচিত।
উপাদানটির জন্য আপনি সামগ্রী তৈরি করতে পারেন এমন বিভিন্ন উপায় রয়েছে (আপনার উদাহরণের মতো একটি আক্ষরিক স্ট্রিং সেট করুন; গোঁফ, হ্যান্ডলবারস, ইত্যাদির মতো একটি টেম্প্লেটিং লাইব্রেরি ব্যবহার করুন)। আপনার কীভাবে el
দেখার সম্পত্তিটি ব্যবহার করা উচিত তা নির্ভর করে আপনি কী করছেন।
বিদ্যমান উপাদান
আপনার রেন্ডারিং উদাহরণটি পরামর্শ দেয় যে আপনার কাছে বিদ্যমান উপাদান রয়েছে যা আপনি দৃশ্যের জন্য নির্ধারিত করছেন, যদিও আপনি দর্শনগুলি ইনস্ট্যান্টেশন দেখান না। যদি এটি হয়, এবং উপাদানটি নথিতে ইতিমধ্যে রয়েছে, তবে আপনি এটির মতো কিছু করতে চাইতে পারেন (এর বিষয়বস্তু আপডেট করুন el
, তবে el
নিজেই পরিবর্তন করবেন না ):
render : function () {
this.$el.html( "Some stuff" );
}
http://jsfiddle.net/vQMa2/1/
উত্পন্ন উপাদান
ধরা যাক আপনার কোনও বিদ্যমান উপাদান নেই এবং আপনি ব্যাকবোনকে আপনার জন্য একটি উত্পন্ন করতে মঞ্জুরি দেন। আপনি এই জাতীয় কিছু করতে চাইতে পারেন (তবে সম্ভবত স্থপতি জিনিসগুলির চেয়ে এটি আরও ভাল যাতে আপনার দৃষ্টিভঙ্গি নিজের বাইরে কোনও কিছু জানার জন্য দায়বদ্ধ না হয়):
render : function () {
this.$el.html( "Some stuff" );
$( "#some-container" ).append( this.el );
}
http://jsfiddle.net/vQMa2/
টেম্পলেট
আমার ক্ষেত্রে, আমি টেমপ্লেটগুলি ব্যবহার করছি, উদাহরণস্বরূপ:
<div class="player" id="{{id}}">
<input name="name" value="{{name}}" />
<input name="score" value="{{score}}" />
</div>
<!-- .player -->
টেমপ্লেটটি সম্পূর্ণ দর্শনের প্রতিনিধিত্ব করে। অন্য কথায়, টেমপ্লেটের চারপাশে কোনও মোড়ক div.player
থাকবে না - এটি আমার দেখার মূল বা বহিরাগত উপাদান হবে।
আমার প্লেয়ার বর্গটি এর মতো দেখতে পাবেন (এর খুব সরল উদাহরণ সহ render()
):
Backbone.View.extend( {
tagName : 'div',
className : 'player',
attributes : function () {
return {
id : "player-" + this.model.cid
};
},
render : function {
var rendered_template = $( ... );
this.$el.empty().append( rendered_template.children() );
}
} );