লজিক-কম টেম্পলেট (যেমন গোঁফ) এর সুবিধা কী?


100

সম্প্রতি, আমি গোঁফ ছুটেছি যা লজিক-কম টেম্পলেট বলে দাবি করা হচ্ছে ।

তবে এটি লজিক-কম উপায়ে কেন ডিজাইন করা হয়েছে তার কোনও ব্যাখ্যা নেই। অন্য কথায়, লজিক-কম টেম্পলেটটির সুবিধা কী?

উত্তর:


107

অন্য কথায়, এটি আপনাকে পায়ে গুলি করা থেকে বিরত করে। পুরানো জেএসপির দিনগুলিতে, আপনার কোডটি ছড়িয়ে ছিটিয়ে থাকার কারণে জেএসপি ফাইলগুলি জাভা কোডের সাথে ছিটিয়ে দেওয়া খুব সাধারণ ছিল।

আপনি যদি ডিজাইনের মাধ্যমে টেমপ্লেটগুলিতে লজিক প্রতিরোধ করেন (গোঁফ যেমন করে) তবে আপনি যুক্তি অন্য কোথাও রাখতে বাধ্য হবেন, যাতে আপনার টেমপ্লেটগুলি নিরবচ্ছিন্ন হয়ে যায়।

আরেকটি সুবিধা হ'ল আপনি উদ্বেগের পৃথকীকরণের শর্তে ভাবতে বাধ্য হচ্ছেন: আপনার নিয়ামক বা লজিক কোডটি ইউআইতে ডেটা প্রেরণের আগে ডেটা ম্যাসেজ করতে হবে। যদি আপনি পরে আপনার টেমপ্লেটটি অন্যটির জন্য স্যুইচ করেন (আসুন আমরা বলি যে আপনি একটি ভিন্ন টেম্প্লেটিং ইঞ্জিন ব্যবহার শুরু করেছেন), স্থানান্তরটি সহজ হবে কারণ আপনাকে কেবলমাত্র ইউআই বিবরণ প্রয়োগ করতে হয়েছিল (যেহেতু টেমপ্লেটে কোনও যুক্তি নেই, মনে রাখবেন)।


30
সুতরাং, নিয়ন্ত্রণকারীর কোডটি হ'ল একটি বিশেষ উপায়ে উপস্থাপনের জন্য যে ফর্মটি ডেটা ম্যাসেজ করা দরকার তা হ'ল কেন? কেন এটি একটি ভাল বিষয় যে উপস্থাপনাটি পরিবর্তন করতে প্রায়শই নিয়ামক কোড পরিবর্তন করা প্রয়োজন? এটি আমার কাছে খারাপ জিনিস বলে মনে হচ্ছে। আমি ভেবেছিলাম কোনও টেম্পলেট ভাষার একটি লক্ষ্য হ'ল নিয়ন্ত্রক যুক্তিকে যুক্তি উপস্থাপনার যুক্তি থেকে আলাদা করা। একটি বোবা টেম্পলেট যা কোনও সিদ্ধান্ত নিতে পারে না যা নিয়ন্ত্রণর কোডে উপস্থাপনার যুক্তিকে জোর করে। যে সংস্থাগুলিতে কোনও ভিন্ন ব্যক্তি উপস্থাপনে কাজ করেন, তারা নিজেরাই তাদের কাজটি করতে পারবেন না।
jفر00

8
আপনার নিয়ামকটিতে দেখার জন্য আপনাকে ডেটা প্রস্তুত করা উচিত নয়। নিয়ন্ত্রক অ্যাপ্লিকেশন প্রবাহ নিয়ন্ত্রণ করার জন্য। পরিবর্তে আপনার যা করা উচিত তা হল একটি উপস্থাপক শ্রেণি তৈরি করা যা আপনার মডেলটিকে একটি ভিউ মডেলে রূপান্তর করে যা তারপরে দর্শন দ্বারা গ্রাস করা হয়। ভিউ মডেল হ'ল ইউআইয়ের একটি মডেল যা সেই মডেলের থেকে পৃথক যা ব্যবসার যুক্তির অংশ। আমি আপনাকে রবার্ট "আঙ্কেল বব" মার্টিনের "ক্লিন আর্কিটেকচার অ্যান্ড ডিজাইন"
টকটি দেখার পরামর্শ দিচ্ছি

1
এটি নিয়ন্ত্রণকারীর মধ্যে কিছু উপস্থাপনা যুক্তি জোর করে, কিন্তু এটি বিভিন্ন উপস্থাপনা স্তরগুলিকে একসাথে করতে সহায়তা করে। আপনি যদি অনুরূপ ডেটা JSON, এইচটিএমএল বা এক্সএমএল হিসাবে উপস্থাপন করতে চান তবে এইচটিএমএল টেমপ্লেটে আপনার 100% ডেটাটি মোচড় দেওয়া উচিত নয়। এটি JSON এবং XML কে তাদের নিজস্ব মোচড়ানোর ডিসপ্লে যুক্তি রাখতে ছাড়বে। আপনি নিয়ামকটিতে 80% ডিসপ্লে লজিককে কেন্দ্রিয় করছেন, এবং অন্যান্য 20% ল্যাম্বডাস এবং ফিল্টারগুলিতে এম্বেড করছেন।
চুগাদি

65

আমি অনুভব করি যে আমি আমার মতে প্রায় একা, তবে আমি দৃ opposite়ভাবে বিপরীত শিবিরে রয়েছি। আমি বিশ্বাস করি না যে আপনার টেমপ্লেটগুলিতে ব্যবসায়ের যুক্তির মিশ্রণ আপনার প্রোগ্রামিং ভাষার সম্পূর্ণ শক্তি ব্যবহার না করার যথেষ্ট কারণ।

লজিক-কম টেম্পলেটগুলির জন্য সাধারণ যুক্তিটি হ'ল যদি আপনার প্রোগ্রামিং ল্যাঙ্গুয়েজে আপনার সম্পূর্ণ অ্যাক্সেস থাকে তবে আপনি যুক্তিতে মিশ্রিত করতে পারেন যা কোনও টেম্পলেটে নেই। আমি এই যুক্তিযুক্ত হতে পেলাম যে মাংসের টুকরো টুকরো করার জন্য আপনার একটি চামচ ব্যবহার করা উচিত কারণ আপনি যদি ছুরি ব্যবহার করেন তবে নিজেকে কাটাতে পারেন। এটি খুব সত্য, এবং তবুও আপনি যদি পরে ব্যবহার করেন তবে সাবধানতার সাথে আপনি আরও বেশি উত্পাদনশীল হবেন।

উদাহরণস্বরূপ, গোঁফ ব্যবহার করে নিম্নলিখিত টেম্পলেট স্নিপেটটি বিবেচনা করুন :

{{name}}:
<ul>
  {{#items}}
    <li>{{.}}</li>
  {{/items}}
</ul>

আমি এটি বুঝতে পারি, তবে আমি নিম্নলিখিতগুলি ( আন্ডারস্কোর ব্যবহার করে ) আরও বেশি সহজ এবং প্রত্যক্ষ হতে পাই :

<%- name %>:
<ul>
<% _.each(items, function(i){ %>
  <li><%- i %></li>
<% }); %>
</ul>

বলা হচ্ছে, আমি বুঝতে পারি যে লজিকলেস টেমপ্লেটগুলির সুবিধা রয়েছে (উদাহরণস্বরূপ, তারা পরিবর্তন ছাড়াই একাধিক প্রোগ্রামিং ভাষার সাথে ব্যবহার করা যেতে পারে)। আমি মনে করি এই অন্যান্য সুবিধা খুব গুরুত্বপূর্ণ। আমি মনে করি না যে তাদের যুক্তি-স্বভাবের প্রকৃতি তাদের মধ্যে একটি।


134
আমি আশ্চর্য হয়েছি আপনি অনুভব করছেন যে আন্ডারস্কোর টেম্পলেটটি সহজ .. এটি আমার কাছে অনেক কম পঠনযোগ্য বলে মনে হচ্ছে। মাত্র একটি মতামত :-)
বেন ক্লেটন

9
@ বেন-ক্লেটন আমি সম্মত হলাম যে প্রথম বাক্য গঠনটি সুন্দর এবং সম্ভবত আরও পাঠযোগ্য। তবে, আমি যখন "সরল" বলি তখন যে জটিলতাটি আমি চালাচ্ছি তার এটি its
ব্র্যাড

1
কখনও কখনও ত্রৈমাসিক স্টেটমেন্টটি টেমপ্লেটে আপনার উপযুক্ত যুক্তি বিবেচনা করেই উপযুক্ত। বা আমি যদি একটি অ্যারে আইটেমের সংখ্যা আউটপুট করতে চাই? আমি জানি না আমি কীভাবে গোঁফ ব্যবহার করতে পারি, মনে হয় এটির মতো জিনিসের অভাব রয়েছে।
পল শাপিরো 21

5
@ পলশাপিরো আপনি টেমপ্লেটের বাইরে অ্যারেতে আইটেমের সংখ্যা তৈরি করতে এবং এটি একটি পৃথক ভেরিয়েবলে সংরক্ষণ করবেন।
Seun Osewa

4
@ ব্র্যাড, আন্ডারস্কোর টেমপ্লেটটি একটি এক্সএসএস হোল প্রবর্তন করেছে: nameএবং itemsএতে জাভাস্ক্রিপ্ট থাকতে পারে।
ম্যাথু

28

গোঁফ কি লজিক কম?

এটি না:

{{#x}}
  foo
{{/x}}
{{^x}}
  bar
{{/x}}

বেশ কি এর সাথে মিল আছে?

if x
  "foo"
else
  "bar"
end

আর নয় যে চমত্কার অনুরূপ (পড়া: এর প্রায় এক ডেফিনেশন) উপস্থাপনা যুক্তিবিজ্ঞান?


17
হ্যাঁ, আপনি যদি কেবল কোনও জিনিসের সত্যতা মূল্যায়ন করছেন তবে আরও জটিল কিছু করার চেষ্টা করা সম্ভব নয় ( if x > 0 && x < 10) ... সুতরাং, যুক্তি দিয়ে বা ছাড়াই গোঁফ ব্যবহার করা সম্ভব হলেও এটি আপনার বিষয়। সর্বোপরি, এটি কেবল একটি সরঞ্জাম।
টম অ্যাশওয়ার্থ

5
আপনি এটিকে ভুল উপায়ে দেখছেন। আপনি কোনও ভাষায় কয়েকটি জিনিস করতে পারেন যা তার সাধারণ দৃষ্টান্তের ঠিক নয়, এর অর্থ এই নয় যে ভাষাটি সেই দৃষ্টান্তের নয়। আপনি জাভা বা হাস্কেলতে আবশ্যক কোড লিখতে পারেন, তবুও আপনি এটি বলবেন না যে জাভা একটি ওও ভাষা নয় এবং হাস্কেলকে কার্যকরী ভাষা নয়। ভাষাটি আপনাকে কীভাবে সহজেই করতে দেয় এবং কী ধরণের ভাষা তা আপনার দিকে নিয়ে যায় তা দেখুন।
সিজেএস

@ কর্টজে.স্যাম্পসন আপনার উপমাটি অর্থপূর্ণ হবে যদি জাভা নিজেকে "ফাংশনাল-কম" হিসাবে বিক্রি করেন বা হাস্কেল যদি নিজেকে "অবজেক্ট-ওরিয়েন্টেড-কম" হিসাবে বিক্রি করেন। এই উত্তরটি দেখিয়ে দিচ্ছে যে "লজিক-কম" সর্বোপরি একটি ভুলনীতিবিদ।
Corey

1
আমি মনে করি আপনি আমার সাথে একমত হন যে আমরা যখন কোনও ভাষা "ফাংশনাল" বলি যার অর্থ আমরা "ক্রিয়াকলাপের দিকে ঝুঁকছি।" মতবিরোধটি মনে হচ্ছে যে আমি "এক্স-কম "টিকে" এক্স থেকে দূরে দূরে রাখা "হিসাবে সংজ্ঞায়িত করেছি যেখানে আপনি এটি" এক্স করতে সম্পূর্ণরূপে অক্ষম "হিসাবে সংজ্ঞায়িত করেছেন whereas
সিজেএস

13

লজিক-কম টেম্পলেটটি এমন একটি টেম্পলেট যা আপনার পূরণ করার জন্য ছিদ্রযুক্ত এবং আপনি কীভাবে এটি পূরণ করেন তা নয়। যুক্তি অন্য কোথাও স্থাপন করা হয়েছে এবং সরাসরি টেম্পলেটে ম্যাপ করা হয়েছে। উদ্বেগের এই বিভাজনটি আদর্শ কারণ তখন টেমপ্লেটটি সহজেই বিভিন্ন যুক্তি দিয়ে তৈরি করা যেতে পারে, এমনকি কোনও আলাদা প্রোগ্রামিং ভাষার সাথেও তৈরি করা যায়।

থেকে গোঁফ ম্যানুয়াল :

আমরা এটিকে "যুক্তি-কম" বলি কারণ বিবৃতি, অন্য ধারা বা লুপের জন্য যদি থাকে না are পরিবর্তে কেবল ট্যাগ রয়েছে। কিছু ট্যাগ একটি মান, কিছু না কিছুই, এবং কিছু মান একটি সিরিজ দিয়ে প্রতিস্থাপিত হয়। এই নথিটি বিভিন্ন ধরণের গোঁফ ট্যাগের ব্যাখ্যা করে।


6
বিবরণটি সামান্য পরিশীলিত, কারণ বিভাগগুলি শর্তাধীন এবং লুপগুলির মতো কাজ করে, কেবল খুব সীমাবদ্ধ। হ্যাশটিতে কলযোগ্যদের উল্লেখ করার ক্ষমতা আপনাকে বিভাগগুলি একটি প্রাথমিক প্রোগ্রামিং ভাষায় রূপান্তর করতে দেয়। তবুও, অন্ততপক্ষে এটি উত্সাহ দেওয়ার পরিবর্তে route রুটটি নামা শক্তিশালী করে তোলে।
টম অ্যান্ডারসন

1
অবশ্যই, তবে শর্ত এবং পুনরাবৃত্তির জন্য ব্লকগুলি ছাড়াই একটি টেম্পলেট সিস্টেম তুলনামূলকভাবে অকেজো হবে। টেমপ্লেট নিজেই ব্লকটি কীসের জন্য বা এটি কীভাবে পরিচালিত হয় তা নির্দিষ্ট করে না।
জেরেমি

12

মুদ্রার উল্টো দিকটি হ'ল ব্যবসায়ের যুক্তি উপস্থাপনা থেকে দূরে রাখতে মরিয়া প্রয়াসে আপনি মডেলটিতে প্রচুর উপস্থাপনা যুক্তি যুক্ত করেন। একটি সাধারণ উদাহরণ হতে পারে যে আপনি কোনও টেবিলের বিকল্প সারিগুলিতে "বিজোড়" এবং "এমনকি" ক্লাস রাখতে চান, যা ভিউ টেম্পলেটে একটি সাধারণ মডুলো অপারেটর দিয়ে করা যেতে পারে। তবে যদি আপনার ভিউ টেমপ্লেট আপনাকে এটি করতে দেয় না, তবে আপনার মডেল ডেটাতে আপনাকে কেবল কোন সারিটি বিজোড় বা সমান নয় তা সংরক্ষণ করতে হবে, তবে আপনার টেম্পলেট ইঞ্জিনটি কতটা সীমাবদ্ধ তার উপর নির্ভর করে আপনাকে এমনকি আপনার মডেলকে দূষিত করার প্রয়োজন হতে পারে আসল সিএসএস ক্লাসের নাম সহ। মডেলগুলি থেকে পুরো স্টপেজ থেকে পৃথক হওয়া উচিত। তবে মডেলগুলিকে অ্যাউনস্টিকও দেখা উচিত এবং এই "নো-লজিক" টেম্পলেট ইঞ্জিনগুলি আপনাকে ভুলে যেতে বাধ্য করে। যুক্তি উভয় জায়গায় যায়,আসলে কোথায় যায় তা সঠিকভাবে সিদ্ধান্ত নিতে পারে। এটি কি উপস্থাপনা উদ্বেগ, বা ব্যবসা / ডেটা উদ্বেগ? ১০০% আদিম দৃষ্টিভঙ্গির প্রয়াসের জন্য, দূষণটি কেবল অন্য কম দৃশ্যমান তবে সমানভাবে অনুচিত জায়গায় অবতরণ করে।

অন্যদিকে ফিরে ক্রমবর্ধমান একটি আন্দোলন রয়েছে এবং আশা করা যায় যে বিষয়গুলি আরও যুক্তিসঙ্গত মধ্যম স্থলে কোথাও স্থান পাবে।


6
সেখানে আপনার সাথে একমত নন। লজিক-কম টেম্পলেটগুলির জন্য উপস্থাপনার যুক্তি মডেলটিতে যায় না, এটি সেই দৃষ্টিতে যায় যেখানে এটি সম্পর্কিত। উপস্থাপনাটির জন্য এটি প্রস্তুত করার জন্য ভিউটি কাঁচা মডেল ডেটা এবং প্রয়োজনীয় ম্যাসেজগুলি গ্রহণ করে (বিজোড় / এমনকি সারিগুলি উল্লেখ করে)।
acjay

1
দৃষ্টিভঙ্গি কেন টেম্পলেটগুলির চেয়ে বেশি হতে পারে না এবং কোনও টেমপ্লেটের জন্য ডেটা ম্যাসেজ করার কোড অন্তর্ভুক্ত করে?
লিগি

1
acjohnson55 - এটি কোথায় যেতে হবে সে সম্পর্কে আমি আপনার সাথে একমত (দর্শন), তবে যুক্তি-কম টেম্পলেটগুলি এতে প্রচুর পরিমাণে বাধা দেয়। @ লিগি - আমি মনে করি ভিউগুলিতে খুব বেশি যুক্তিযুক্তির বিরুদ্ধে একটি প্রতিক্রিয়া রয়েছে, তবে ভিউগুলিতে উপস্থাপনা-নির্দিষ্ট যুক্তি রোধ করতে জিনিসগুলি অন্যদিকে খুব বেশি এগিয়ে গেছে।
mattmc3

4
আমি জানি যে আমি পার্টিতে দেরি করেছি, তবে সিএসএসের নবম আইটেমটি (বিজোড়) সারি রঙগুলি পরিবর্তনের জন্য ব্যবহার করা উচিত।
ড্যানরেডাক্স

1
মডেল এবং সংগ্রহগুলি, বা অন্য কোনও ডেটা থেকে দর্শন দ্বারা তৈরি করা একটি মধ্যবর্তী উপস্থাপনা অবজেক্ট থাকায় থ্রেয়ের কোনও ভুল নেই। এইভাবে, ভিউগুলি উপস্থাপনা ডেটা তৈরি করে যা ভিউ রেন্ডার করার জন্য কোনও টেমপ্লেটের সাথে মিশে যায়।
wprl

11

এটি আপনার টেমপ্লেটগুলি পরিষ্কার করে তোলে এবং এটি এমন জায়গায় যুক্তি রাখতে বাধ্য করে যেখানে এটি সঠিকভাবে ইউনিট-টেস্ট করা যেতে পারে।


2
আপনি আরও বিশদ দিয়ে এটি ব্যাখ্যা করতে পারেন?
মরগান চেং

28
যৌক্তিক টেম্প্লেটিং ভাষা ব্যবহার করে একটি সিস্টেমে তিন মাস কাজ করা জেএসপির মতো প্রোগ্রামারদের সাথে যারা যুক্তি এবং উপস্থাপনা আলাদা করার বিষয়ে উদ্যোগী নন। আপনি এমন একটি সিস্টেম তৈরি করতে পাবেন যা মূলত পৃষ্ঠাতে প্রোগ্রামিং রয়েছে - টেবিল বিন্যাসের জন্য পাটিগণিত, মূল্য নির্ধারণের তথ্যটি কী দেখানোর জন্য শর্তাবল এবং আরও অনেক কিছু। টেম্প্লেটিং ভাষাগুলি অত্যন্ত দুর্বল প্রোগ্রামিং ভাষা, সুতরাং এটি বিকাশ এবং রক্ষণাবেক্ষণের দুঃস্বপ্নকে তোলে। গোঁফের মতো কিছু আপনাকে প্রথমে সেই পরিস্থিতিতে পড়তে দেয় না।
টম অ্যান্ডারসন

যদি লজিক কোনও ফাংশনের আকারে থাকে তবে এটি একটি মাইক্রো-টেম্প্লেটিং সিস্টেম ব্যবহার করতে পারে যা এম্বেডড যুক্তি এবং ইউনিট-পরীক্ষিত সমর্থন করে । আমার কাছে সবচেয়ে খারাপ ধারণা হ্যান্ডেলবারগুলি "সহায়ক" বলে মনে হচ্ছে (দেখুন স্পিন.টমিকোবজেক্ট ডটকম / ২০১০/০//১//২ "অ্যাডভান্সড ইউজ") - স্ক্রিপ্টের মধ্যে থাকার কারণে এগুলি ইউনিট-পরীক্ষায় অসম্ভব বলে মনে হয় / প্লেইন পুরানো স্ক্রিপ্ট (/ টাইপ / জাভাস্ক্রিপ্ট) ট্যাগের পরিবর্তে পাঠ্য ট্যাগগুলি টাইপ করুন
ডিজিউড

8

এই কথোপকথনটি মনে হয় যখন মধ্যবয়সী ভিক্ষুরা যখন পিনের শেষে কত স্বর্গদূতকে ফিট করতে পারে সে নিয়ে বিতর্ক করবেন। অন্য কথায় এটি ধর্মীয়, নিরর্থক এবং ভুলভাবে কেন্দ্রীভূত বোধ করা শুরু করে।

মিনি-রেন্ট ফলস্বরূপ (উপেক্ষা করে নির্দ্বিধায়):

আপনি যদি পড়া চালিয়ে যেতে না চান .. উপরের বিষয়ে আমার সংক্ষিপ্ত প্রতিক্রিয়া হ'ল: আমি যুক্তি-কম টেম্পলেটগুলির সাথে একমত নই আমি এটিকে চরমপন্থার একটি প্রোগ্রামিং রূপ হিসাবে মনে করি। :-) :-)

এখন আমার রেন্ট পুরোদমে চলছে: :-)

আমি মনে করি আপনি যখন অনেকগুলি ধারণাকে চূড়ান্ত দিকে নিয়ে যান, ফলাফলটি হাস্যকর হয়। এবং কখনও কখনও (যেমন এই বিষয়) বিষয়টি হ'ল আমরা "ভুল" ধারণাটিকে চূড়ান্ত দিকে নিয়ে যাই।

ভিউ থেকে সমস্ত যুক্তি সরিয়ে ফেলা হচ্ছে "হাস্যকর" এবং ভুল ধারণা।

এক মুহুর্তের জন্য পিছনে যান।

আমাদের নিজেদেরকে যে প্রশ্নটি জিজ্ঞাসা করা উচিত তা হ'ল যুক্তিটি কেন সরিয়ে? ধারণাটি হ'ল উদ্বেগকে আলাদা করা । যতটা সম্ভব ব্যবসায়ের যুক্তি থেকে দর্শন প্রক্রিয়াকরণকে আলাদা রাখুন। কেন এমন করবেন? এটি আমাদের মতামতগুলি (বিভিন্ন প্ল্যাটফর্মের জন্য: মোবাইল, ব্রাউজার, ডেস্কটপ ইত্যাদির জন্য) বদলাতে দেয় এবং এটি আমাদের আরও সহজেই নিয়ন্ত্রণ-প্রবাহ, পৃষ্ঠার সিক্যুয়েন্স, বৈধতা পরিবর্তন, মডেল পরিবর্তনগুলি, সুরক্ষা অ্যাক্সেস ইত্যাদি সরিয়ে নিতে দেয় Also এছাড়াও যখন যুক্তি থাকে ভিউগুলি (বিশেষত ওয়েব দর্শন) থেকে সরানো হয়েছে, এটি দর্শনগুলি আরও বেশি পঠনযোগ্য এবং তাই আরও রক্ষণাবেক্ষণযোগ্য করে তোলে। আমি এটি পেয়েছি এবং এটির সাথে একমত

তবে ওভাররাইডিং ফোকাস উদ্বেগের পৃথকীকরণের দিকে হওয়া উচিত। 100% যুক্তি-কম দর্শন নয়। দর্শনগুলির মধ্যে যুক্তিটির কীভাবে "মডেল" রেন্ডার করা যায় তার সাথে সম্পর্কিত হওয়া উচিত। যতদূর আমি উদ্বিগ্ন, ভিউগুলিতে যুক্তি পুরোপুরি ঠিক আছে। আপনার কাছে এমন দর্শন-যুক্তি থাকতে পারে যা ব্যবসায়-যুক্তি নয়।

হ্যাঁ, যেদিন আমরা জেএসপি, পিএইচপি বা এএসপি পৃষ্ঠাগুলি কোড যুক্তি এবং দৃষ্টিভঙ্গি দেখার সামান্য বা পৃথকীকরণের সাথে লিখেছিলাম, এই ওয়েব-অ্যাপগুলির রক্ষণাবেক্ষণ ছিল এক চরম দুঃস্বপ্ন। বিশ্বাস করুন আমি জানি, আমি এর মধ্যে কয়েকটি বিদ্যা তৈরি করেছি এবং রক্ষণ করেছি। এই রক্ষণাবেক্ষণের পর্যায়েই আমি আমার এবং আমার সহকর্মীদের উপায়গুলি (দৃষ্টিভঙ্গিভাবে) বুঝতে পেরেছিলাম। :-) :-)

সুতরাং উচ্চ থেকে আদেশটি (শিল্প পন্ডিতরা) হয়ে উঠল, আপনাকে অবশ্যই অবশ্যই একটি ওয়েব-অ্যাপ্লিকেশনকে ফ্রন্ট-ভিউ কন্ট্রোলারের মতো কিছু ব্যবহার করে গঠন করতে হবে (যা হ্যান্ডলার বা ক্রিয়াকলাপে প্রেরণ করা হয়েছে [আপনার ওয়েব-কাঠামো চয়ন করুন) এবং আপনার ভিউগুলিতে অবশ্যই কোনও কোড থাকতে হবে । মতামতগুলি বোবা টেম্পলেটগুলি হয়ে উঠবে।

সুতরাং আমি উপরোক্ত অনুভূতির সাথে সাধারণভাবে একমত হয়েছি, আদেশের আইটেমগুলির সুনির্দিষ্টতার জন্য নয়, বরং আদেশের পিছনে অনুপ্রেরণা - যা দৃষ্টিভঙ্গি এবং ব্যবসায়িক যুক্তির মধ্যে উদ্বেগের বিচ্ছিন্নতার ইচ্ছা।

আমি যে একটি প্রকল্পে জড়িত ছিলাম তাতে আমরা হাস্যকর চরমের প্রতি যুক্তিযুক্ত-কম ভিউ ধারণাটি অনুসরণ করার চেষ্টা করেছি। আমাদের একটি হোম-বর্ধিত টেম্পলেট ইঞ্জিন ছিল যা আমাদের এইচটিএমএলে মডেল অবজেক্টগুলি রেন্ডার করতে দেয়। এটি একটি সাধারণ টোকেন ভিত্তিক সিস্টেম ছিল। এটি একটি খুব সাধারণ কারণে ভয়ানক ছিল। কখনও কখনও একটি দৃশ্যে আমাদের সিদ্ধান্ত নিতে হয়েছিল, আমি কি এইচটিএমএলের এই ছোট্ট স্নিপেটটি প্রদর্শন করব .. বা না .. সিদ্ধান্তটি সাধারণত মডেলের কিছু মানের ভিত্তিতে হয়। যখন আপনার দৃষ্টিভঙ্গিতে একেবারে কোনও যুক্তি নেই, আপনি কীভাবে এটি করেন? ভাল আপনি পারবেন না। আমাদের আর্কিটেক্টের সাথে এই সম্পর্কে কিছু বড় যুক্তি ছিল। আমাদের দৃষ্টিভঙ্গি লেখার সম্মুখ-প্রান্তের এইচটিএমএল লোকেরা যখন এগুলির মুখোমুখি হয়েছিল তখন তারা সম্পূর্ণরূপে ব্যথিত হয়েছিল এবং তারা খুব চাপে পড়েছিল কারণ তারা তাদের অন্যথায় সাধারণ উদ্দেশ্যগুলি অর্জন করতে পারেনি। সুতরাং আমি আমাদের টেম্প্লেটিং ইঞ্জিনের মধ্যে একটি সাধারণ আইএফ-বিবৃতি ধারণাটি চালু করেছি। আমি আপনাকে স্বস্তি ও শান্তির বর্ণনা দিতে পারি না। আমাদের টেমপ্লেটগুলিতে একটি সাধারণ আইএফ-বিবৃতি ধারণা নিয়ে সমস্যাটি সমাধান করা হয়েছিল! হঠাৎ আমাদের টেম্প্লেটিং ইঞ্জিনটি ভাল হয়ে গেল।

তাহলে আমরা কীভাবে এই নির্বিকার চাপের মধ্যে পড়ে গেলাম? আমরা ভুল উদ্দেশ্যে মনোনিবেশ করেছি। আমরা নিয়মটি অনুসরণ করেছি, আপনার দৃষ্টিভঙ্গিতে আপনার কোনও যুক্তি থাকতে হবে না। এটা ভুল ছিল। আমি মনে করি "নিয়ম-এর-থাম্ব" হওয়া উচিত, আপনার মতামতগুলিতে সেই পরিমাণ যুক্তি হ্রাস করুন। কারণ আপনি যদি তা না করেন তবে অসাবধানতাবশত ব্যবসায়িক যুক্তিগুলিকে এই দৃষ্টিতে ক্রপ হতে দেয় - যা উদ্বেগের বিচ্ছেদকে লঙ্ঘন করে।

আমি বুঝতে পেরেছি যে আপনি যখন ঘোষণা করেন যে "ভিউগুলিতে আপনার কোনও যুক্তি থাকতে হবে না", আপনি কখন "ভাল" প্রোগ্রামার হচ্ছেন তা জানা সহজ হয়ে যায়। (যদি এটি হয় আপনার মঙ্গলতার পরিমাপ)। এখন উপরোক্ত নিয়ম সহ এমনকি মাঝারি জটিলতার একটি ওয়েব-অ্যাপ কার্যকর করার চেষ্টা করুন। এটি এত সহজে হয় না।

আমার জন্য, ভিউগুলিতে যুক্তির নিয়মটি এতটা পরিষ্কার নয় এবং খোলামেলাভাবে আমি সেখান থেকেই এটি চাই।

আমি যখন ভিউগুলিতে প্রচুর যুক্তি দেখি, তখন আমি একটি কোড-গন্ধ সনাক্ত করি এবং ভিউগুলি থেকে বেশিরভাগ যুক্তি সরিয়ে দেওয়ার চেষ্টা করি - আমি অন্য কোথাও ব্যবসায়ের যুক্তি নিশ্চিত করার চেষ্টা করি - আমি উদ্বেগগুলি আলাদা করার চেষ্টা করি। তবে যখন আমি এমন লোকদের সাথে চ্যাট শুরু করি যারা বলে যে আমাদের অবশ্যই এই দৃষ্টিকোণ থেকে সমস্ত যুক্তি সরিয়ে ফেলতে হবে, ভাল, আমার কাছে, যে কেবল ধর্মান্ধতার স্ম্যাকস হিসাবে আমি জানি যে আপনি উপরে বর্ণিত পরিস্থিতিতে যেমন শেষ করতে পারেন।

আমি আমার ভাড়া নিয়ে কাজ শেষ করেছি। :-)

চিয়ার্স,

ডেভিড


দুর্দান্ত উত্তর, এটি সর্বোত্তম প্রোগ্রামিং অনুশীলন সম্পর্কে .. এবং
যাইহোক,

5

লজিকলেস টেম্পলেটগুলির জন্য আমি যে সর্বোত্তম যুক্তি নিয়ে এসেছি তা হ'ল আপনি ক্লায়েন্ট এবং সার্ভার উভয় ক্ষেত্রে একই একই টেম্পলেট ব্যবহার করতে পারেন। তবে আপনার আসলে যুক্তিবিহীন দরকার নেই, কেবলমাত্র এটির নিজস্ব "ভাষা" রয়েছে। আমি এমন লোকদের সাথে একমত হই যারা অভিযোগ করে যে গোঁফ অর্থহীনভাবে সীমাবদ্ধ করে চলেছে। ধন্যবাদ, তবে আমি একটি বড় ছেলে এবং আমি আপনার সাহায্য ছাড়াই আমার টেমপ্লেটগুলি পরিষ্কার রাখতে পারি।

অন্য বিকল্পটি হ'ল একটি টেম্প্লেটিং সিনট্যাক্স সন্ধান করুন যা ক্লায়েন্ট এবং সার্ভার উভয়ই সমর্থিত এমন একটি ভাষা ব্যবহার করে যা সার্ভারে জাভাস্ক্রিপ্ট হয় নোড.জেএস ব্যবহার করে অথবা আপনি জেএস ইন্টারপ্রেটার এবং জেসসনকে থেরুবাইরারের মতো কোনও কিছুর মাধ্যমে ব্যবহার করতে পারেন।

তারপরে আপনি haml.js এর মতো কিছু ব্যবহার করতে পারেন যা এখন পর্যন্ত সরবরাহ করা উদাহরণগুলির তুলনায় অনেক পরিষ্কার এবং দুর্দান্ত কাজ করে।


আমি পুরোপুরি একমত. কিছু পাঠের পরে, আমি এই সিদ্ধান্তে পৌঁছেছি যে ক্লায়েন্ট এবং সার্ভার উভয় পক্ষের জেএস-এ টেমপ্লেট করার দক্ষতা নির্দিষ্ট টেম্প্লেটিং ভাষাগুলির একগুচ্ছের চেয়ে আমার প্রয়োজনগুলি আরও ভালভাবে পূরণ করে
ক্রাইস্টোফার

4

একটি বাক্যে: লজিক-কম মানে টেমপ্লেট ইঞ্জিনটি নিজেই কম জটিল এবং তাই এর চেয়ে ছোট পদক্ষেপ রয়েছে এবং এটি অপ্রত্যাশিতভাবে আচরণ করার জন্য কম উপায় রয়েছে।


3

যদিও প্রশ্নটি পুরানো এবং উত্তর দেওয়া হয়েছে, আমি আমার 2 to যুক্ত করতে চাই (যা কোনও রেন্টের মতো মনে হতে পারে, তবে এটি সীমাবদ্ধতার বিষয়ে নয় এবং যখন তারা অগ্রহণযোগ্য হয়)।

কোনও টেম্পলেটটির লক্ষ্য হ'ল কিছু সরবরাহ করা, ব্যবসায়িক যুক্তি সম্পাদন করা নয়। এখন একটি টেমপ্লেটে আপনার যা করা দরকার তা করতে সক্ষম না হওয়ায় এবং সেগুলিতে "ব্যবসায়িক যুক্তি" থাকার মধ্যে একটি পাতলা রেখা রয়েছে। যদিও আমি গোঁফের প্রতি সত্যই ইতিবাচক ছিলাম এবং এটি ব্যবহার করার চেষ্টা করেছি, তবে খুব সহজ ক্ষেত্রে আমার যা প্রয়োজন তা করতে সক্ষম না হয়ে আমি শেষ হয়ে গেলাম।

উপাত্তের "ম্যাসেজিং" (গৃহীত উত্তরের শব্দগুলি ব্যবহার করতে) একটি আসল সমস্যা হয়ে উঠতে পারে - এমনকি সহজ পাথও সমর্থিত নয় (হ্যান্ডলবার্স.জেস সম্বোধন করে এমন কিছু)। আমার কাছে যদি ডেটা দেখার ডেটা থাকে এবং আমার এই টুইটটি করা দরকার যে প্রতিবারই আমি কোনও কিছু রেন্ডার করতে চাই কারণ আমার টেম্পলেট ইঞ্জিনটি খুব সীমিত, তবে এটি শেষ পর্যন্ত সহায়ক নয়। এবং এটি প্ল্যাটফর্ম-স্বাধীনতার অংশটিকে পরাস্ত করে যা গোঁফ নিজের জন্য দাবী করে; আমাকে সর্বত্র ম্যাসেজ করার যুক্তিকে নকল করতে হবে।

এটি বলেছিল, কিছুটা হতাশার পরে এবং অন্যান্য টেম্পলেট ইঞ্জিনগুলি চেষ্টা করার পরে আমরা আমাদের নিজস্ব (... এখনও অন্য একটি ...) তৈরি করে শেষ করেছি, যা .NET রেজার টেম্পলেটগুলি দ্বারা অনুপ্রাণিত সিনট্যাক্স ব্যবহার করে। এটি সার্ভারে বিশ্লেষণ করে সংকলন করা হয়েছে এবং একটি সাধারণ, স্ব-অন্তর্ভুক্ত জেএস ফাংশন তৈরি করে (আসলে প্রয়োজনীয় জেএস মডিউল হিসাবে) যা ফলস্বরূপ একটি স্ট্রিং ফিরিয়ে টেমপ্লেটটি "চালানো" করতে অনুরোধ করা যেতে পারে। ব্র্যাডের দেওয়া নমুনাটি আমাদের ইঞ্জিনটি ব্যবহার করার সময় এটির মতো দেখাবে (যা আমি ব্যক্তিগতভাবে গোঁফ এবং আন্ডারস্কোর উভয়ের তুলনায় পঠনযোগ্যভাবে অনেক বেশি উন্নত মনে করি):

@name:
<ul>
@for (items) {
  <li>@.</li>
}
</ul>

গোঁফের সাথে পার্টিতে ডাকার সময় আরও একটি যুক্তি-মুক্ত সীমাবদ্ধতা আমাদের আঘাত করে। পার্টিয়ালগুলি গোঁফ দ্বারা সমর্থিত থাকলে, প্রথমে ডেটা পাস করার জন্য কাস্টমাইজ করার কোনও সম্ভাবনা নেই। সুতরাং একটি মডুলার টেম্পলেট তৈরি করতে এবং ছোট ব্লকগুলি পুনরায় ব্যবহার করতে সক্ষম হওয়ার পরিবর্তে আমি সেগুলিতে বারবার কোডযুক্ত টেমপ্লেটগুলি শেষ করব।

এক্সপ্যাথ দ্বারা অনুপ্রাণিত একটি কোয়েরি ভাষা প্রয়োগ করে আমরা এটি সমাধান করেছি, যাকে আমরা জাপাথ বলেছি। মূলত, আমরা বিন্দুগুলি ব্যবহার করি বাচ্চাদের ট্র্যাভারিংয়ের জন্য / ব্যবহার করার পরিবর্তে এবং কেবল স্ট্রিংই নয়, সংখ্যা এবং বুলিয়ান আক্ষরিকাগুলি সমর্থিত হয় তবে অবজেক্ট এবং অ্যারে (ঠিক জেএসএনের মতো)। ভাষাটি পার্শ্ব-প্রভাব-মুক্ত (যা টেম্পলেট করার জন্য আবশ্যক) তবে নতুন আক্ষরিক অবজেক্ট তৈরি করে প্রয়োজনীয়ভাবে "ম্যাসেজ" ডেটা মঞ্জুরি দেয়।

ধরা যাক আমরা একটি পছন্দসই শিরোনাম এবং সারিগুলির ক্রিয়াকলাপগুলির লিঙ্কগুলি সহ একটি "ডেটা গ্রিড" টেবিলটি রেন্ডার করতে চাই এবং পরে jQuery ব্যবহার করে সক্রিয়ভাবে সারি যুক্ত করতে চাই। আমি কোডটি সদৃশ করতে না চাইলে সারিগুলির আংশিক হওয়া দরকার। আর সেই কারণেই সমস্যাটি শুরু হয় যদি কিছু অতিরিক্ত তথ্য যেমন কলামগুলি কীভাবে রেন্ডার করা হবে তা ভিউমোডেলের অংশ এবং প্রতিটি সারিতে থাকা ক্রিয়াগুলির জন্য একই। আমাদের টেম্পলেট এবং ক্যোয়ারী ইঞ্জিন ব্যবহার করে এখানে কিছু আসল ওয়ার্কিং কোড রয়েছে:

সারণী টেমপ্লেট:

<table>
    <thead>
        <tr>
            @for (columns) {
                <th>@title</th>
            }
            @if (actions) {
                <th>Actions</th>
            }
        </tr>
    </thead>
    <tbody>
        @for (rows) {
            @partial Row({ row: ., actions: $.actions, columns: $.columns })
        }
    </tbody>
</table>

সারি টেমপ্লেট:

<tr id="@(row.id)">
    @for (var $col in columns) {
        <td>@row.*[name()=$col.property]</td>
    }
    @if (actions) {     
        <td>
        @for (actions) {
            <button class="btn @(id)" value="@(id)">@(name)...</button>
        }
        </td>
    }
</tr>

জেএস কোড থেকে অনুরোধ:

var html = table({
    columns: [
        { title: "Username", property: "username" },
        { title: "E-Mail", property: "email" }
    ],
    actions: [
        { id: "delete", name: "Delete" }
    ],
    rows: GetAjaxRows()
})

এটিতে কোনও ব্যবসায়িক যুক্তি নেই তবে এটি পুনরায় ব্যবহারযোগ্য এবং কনফিগারযোগ্য এবং এটি পার্শ্ব-প্রতিক্রিয়া মুক্তও is


13
আমি সত্যই এই উত্তরটির বিন্দুটি দেখতে পাচ্ছি না, এটি প্রশ্নের কোনও উত্তর দেয় না। আপনি বলছেন আসলে সেগুলি কীভাবে হয় বা কীভাবে ঘটে তা বর্ণনা না করেই সীমাবদ্ধতা রয়েছে। অবশেষে আপনি নিজের সিস্টেমের এমন একটি আলোচনার সূচনা করেছিলেন যা অন্য কারও কাছে উপলভ্য নয়, বাস্তবে এটি স্তন্যপান করতে পারে এবং একদিন ডেইলিওটিএফ-এ শেষ হতে পারে তবে আমরা কখনই জানতে পারি না। ওপেন সোর্স এটি, এটিতে লিঙ্ক করুন এবং আমাদের সিদ্ধান্ত নিতে দিন!
mattmanser

1
@ ম্যাটম্যান্সার, আমি সীমাবদ্ধতাগুলি সম্পর্কে লিখেছি যা গোঁফ (এবং হ্যান্ডলবারস) ব্যবহার না করার কারণ: পার্টিয়ালগুলি চাওয়ার জন্য পথ, পূর্বাভাস, ভেরিয়েবল, ডেটা ট্রান্সফর্মেশনগুলির জন্য সমর্থন হারিয়েছে। এগুলি আমাদের জন্য গুরুত্বপূর্ণ ছিল। আমরা সম্ভবত কোনও দিন কোডটি ওপেন-সোর্স করব, তবে যেহেতু এটি একটি সার্ভার-সাইড (বা আপনি চাইলে সংকলন-সময়) সমাধান যা জেএস কোডের টেমপ্লেটগুলি সংকলন করে এটি গোঁফের মতো একই বৃহত্তর শ্রোতা রাখবে না। আপনি যদি যোগাযোগ করতে চান তবে নির্দ্বিধায় আমার সাথে যোগাযোগ করুন - আমি গুগল কোডে বিএসএন গোল্ডপার্সারেরও লেখক (যেখানে আপনি আমার ইমেলটি রিডমে ফাইলটিতে সহজেই খুঁজে পেতে পারেন)।
Lucero

আমি আপনার ক্ষুর ইঞ্জিনের মত ধারণা পছন্দ করি ... এটি কি ওপেন সোর্স?
ক্র্যাকার

@ ক্র্যাকার, না, এটি (এখনও) নয় - এটির "সমস্যা" হ'ল বর্তমানে টেমপ্লেটগুলি এএসপি.নেট এমভিসি চালিত সার্ভারে জেএস কোডে সংকলিত হয়েছে, এবং এইভাবে লক্ষ্যবস্তু শ্রোতা অন্যান্য টেম্প্লেটিং ইঞ্জিনগুলির মতো বড় নয় is । এগুলি ছাড়াও এটি একটি বৃহত লাইব্রেরির অংশ যা এটিকে খোলার সোর্স করার জন্য প্রথমে আলাদা করতে হবে।
Lucero

1
@ এসাইলিজা এটি rowস্থির নাম ব্যবহারের পরিবর্তে বস্তু থেকে নেওয়া সম্পত্তি নামগুলি গতিশীলভাবে নির্দিষ্ট করতে দেয় । উদাহরণস্বরূপ যদি $col.property == 'Something'তাহলে এটিতে সামগ্রীটি পাওয়া যায় row.Something
লুসারো

2

অক্ষর গণনা সহ একটি তালিকা উপস্থাপনের 3 টি উপায় এখানে রয়েছে। প্রথম এবং সংক্ষিপ্ততম ব্যতীত সমস্তগুলি লজিক-কম টেম্প্লেটিং ভাষাতে ..

কফিস্ক্রিপ্ট ( প্রতিক্রিয়াশীল কফি বিল্ডার ডিএসএল সহ) - 37 টি অক্ষর

"#{name}"
ul items.map (i) ->
  li i

নকআউট - 100 টি অক্ষর

<span data-bind="value: name"/>
<ul data-bind="foreach: items">
   <li data-bind="value: i"/>
</ul>

হ্যান্ডলবারস / গোঁফ - 66 টি অক্ষর

{{name}}:
<ul>
  {{#items}}
    <li>{{.}}</li>
  {{/items}}
</ul>

ইন্ডস্কোর - 87 টি অক্ষর

<%- name %>:
<ul>
<% _.each(items, function(i){ %>
  <li><%- i %></li>
<% }); %>
</ul>

আমার ধারণা, লজিক-কম টেম্পলেটগুলির প্রতিশ্রুতি ছিল যে বিস্তৃত দক্ষতা সম্পন্ন লোকেরা তাদের পাদদেশে গুলি না করে লজিক-কম টেম্পলেটগুলি পরিচালনা করতে সক্ষম হবে। তবে উপরের উদাহরণগুলিতে আপনি যা দেখছেন তা হ'ল আপনি যখন স্ট্রিং-ভিত্তিক মার্কআপে ন্যূনতম-যুক্তিযুক্ত ভাষা যুক্ত করেন, ফলাফলটি আরও জটিল হয়, কম হয় না। এছাড়াও, দেখতে দেখতে আপনি পুরানো-স্কুল পিএইচপি করছেন।

স্পষ্টতই আমি "ব্যবসায়িক যুক্তি" (বিস্তৃত গণনা) টেম্পলেটগুলির বাইরে রাখতে আপত্তি করি না। তবে আমি মনে করি যে তাদের প্রথম শ্রেণীর ভাষার পরিবর্তে ডিসপ্লে লজিকের জন্য ছদ্ম-ভাষা দিয়ে, মূল্য দেওয়া হয়। কেবল টাইপ করার জন্য আরও কিছু নয়, প্রসঙ্গ-স্যুইচিংয়ের জঘন্য মিশ্রণটি কারও এটি পড়তে হবে।

উপসংহারে, আমি যুক্তি-কম টেম্পলেটগুলির যুক্তি দেখতে ব্যর্থ হয়েছি, তাই আমি বলব যে তাদের সুবিধাটি আমার কাছে শুভ নয়, তবে আমি শ্রদ্ধা করি যে সম্প্রদায়ের অনেকেই এটি অন্যভাবে দেখেন :)


@ ব্র্যাড, আপনি এই তুলনা সম্পর্কে কি মনে করেন?
ডিন র‌্যাডক্লিফ

2

লজিক-কম টেম্পলেটগুলি ব্যবহারের প্রধান সুবিধাগুলি হ'ল:

  • মডেল-ভিউ বিচ্ছেদকে কঠোরভাবে প্রয়োগ করে , বিশদগুলির জন্য এই কাগজটি দেখুন (অত্যন্ত প্রস্তাবিত)
  • বুঝতে এবং ব্যবহার করা খুব সহজ , কারণ কোনও প্রোগ্রামিং লজিক (এবং জ্ঞান!) প্রয়োজন হয় না এবং বাক্য গঠনটি ন্যূনতম হয়
  • (বিশেষত গোঁফ) অত্যন্ত পোর্টেবল এবং ভাষা স্বাধীন, প্রায় সমস্ত প্রোগ্রামিং পরিবেশে পরিবর্তন ছাড়াই ব্যবহার করা যেতে পারে

দুর্দান্ত সংক্ষিপ্ত উত্তর!
মিঃ ওয়াটসন

1

আমি ব্র্যাডের সাথে একমত: underscoreস্টাইলটি বোঝা সহজ easier তবে আমি অবশ্যই স্বীকার করতে চাই সিনট্যাকটিক চিনিটি সবার পছন্দ নাও হতে পারে। যদি _.eachকিছুটা বিভ্রান্ত হয় তবে আপনি একটি aতিহ্যবাহী forলুপ ব্যবহার করতে পারেন ।

  <% for(var i = 0; i < items.length; i++) { %>
    <%= items[i] %>
  <% } %>

এটা তোলে যদি আপনি যেমন মান নির্মান ফলব্যাক করতে সবসময় সুন্দর forবা if। শুধু ব্যবহার <% if() %>বা <% for() %>যখন Mustacheব্যবহার কিছুটা জন্য নূতন শব্দ if-then-else(এবং বিভ্রান্তিকর আপনি ডকুমেন্টেশন পড়া হয়নি):

{{#x}}
  foo
{{/x}}
{{^x}}
  bar
{{/x}}

টেম্পলেট ইঞ্জিন দুর্দান্ত যখন আপনি সহজে নেস্টেড টেম্পলেটগুলি অর্জন করতে পারবেন ( underscoreশৈলী):

<script id="items-tmpl" type="text/template">
    <ul>
        <% for(var i = 0; i < obj.items.length; i++) { %>
            <%= innerTmpl(obj.items[i]) %>
        <% } %>
    </ul>
</script>

<script id="item-tmpl" type="text/template">
    <li>
        <%= name %>
    </li>
</script>

var tmplFn = function(outerTmpl, innerTmpl) {
    return function(obj) {
        return outerTmpl({obj: obj, innerTmpl: innerTmpl});
    };
};

var tmpl = tmplFn($('#items-tmpl').html(), $('#item-tmpl').html());
var context = { items: [{name:'A',{name:'B'}}] };
tmpl(context);

মূলত আপনি আপনার প্রসঙ্গের সম্পত্তি হিসাবে আপনার অভ্যন্তরীণ tmpl পাস করেন। এবং সেই অনুযায়ী কল করুন। মিষ্টি :)

যাইহোক, যদি আপনার আগ্রহী একমাত্র জিনিস হ'ল টেম্পলেট ইঞ্জিন, স্ট্যান্ডেলোন টেম্পলেট বাস্তবায়ন ব্যবহার করুন। এটি কেবল 900 ক্যারেক্টার যখন মাইনাইফ করা হয় (4 টি দীর্ঘ লাইন):

https://gist.github.com/marlun78/2701678

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.