আপনার ভিউ মডেলটি সংজ্ঞায়িত করতে একটি ফাংশন ব্যবহার করার বেশ কয়েকটি সুবিধা রয়েছে।
প্রধান সুবিধাটি হ'ল আপনার যে মানটির সাথে তাত্ক্ষণিকভাবে অ্যাক্সেস রয়েছে this
তা তৈরি হওয়া উদাহরণের সমান। এর অর্থ আপনি করতে পারেন:
var ViewModel = function(first, last) {
this.first = ko.observable(first);
this.last = ko.observable(last);
this.full = ko.computed(function() {
return this.first() + " " + this.last();
}, this);
};
সুতরাং, আপনার গণনা করা পর্যবেক্ষণযোগ্যকে অন্য this
কোনও সুযোগ থেকে ডেকে আনা হলেও যথাযথ মানের সাথে আবদ্ধ হতে পারে ।
আক্ষরিক কোনও অবজেক্টের সাথে আপনাকে করতে হবে:
var viewModel = {
first: ko.observable("Bob"),
last: ko.observable("Smith"),
};
viewModel.full = ko.computed(function() {
return this.first() + " " + this.last();
}, viewModel);
viewModel
সেক্ষেত্রে আপনি গণনা করা পর্যবেক্ষণযোগ্যতে সরাসরি ব্যবহার করতে পারবেন তবে এটি অবিলম্বে মূল্যায়ন করা হবে (ডিফল্টরূপে) সুতরাং আপনি এটি বস্তুর আক্ষরিক মধ্যে সংজ্ঞায়িত করতে পারবেন না, যেমন viewModel
বস্তুর আক্ষরিক বন্ধ হওয়ার পরে সংজ্ঞায়িত হয় না। আপনার ভিউ মডেলটি তৈরি করা কোনও কলটিতে আবশ্যক নয় এমনটি অনেকেই পছন্দ করেন না।
আপনি this
সর্বদা উপযুক্ত তা নিশ্চিত করতে আপনি যে অন্য প্যাটার্নটি ব্যবহার করতে পারেন তা হ'ল ফাংশনে একটি ভেরিয়েবলের উপযুক্ত মানের সমান this
এবং পরিবর্তে এটি ব্যবহার করা। এটি এমন হবে:
var ViewModel = function() {
var self = this;
this.items = ko.observableArray();
this.removeItem = function(item) {
self.items.remove(item);
}
};
এখন, আপনি যদি কোনও স্বতন্ত্র আইটেম এবং কল করার সুযোগে থাকেন তবে আসলে $root.removeItem
মানটি this
সেই স্তরে আবদ্ধ হওয়া ডেটা হবে (যা আইটেমটি হবে)। এই ক্ষেত্রে স্ব ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে এটি সামগ্রিক দর্শন মডেল থেকে সরানো হচ্ছে।
অন্য একটি বিকল্প ব্যবহার করছে bind
, যা আধুনিক ব্রাউজারগুলি দ্বারা সমর্থিত এবং কেও সমর্থন করে যদি এটি সমর্থন না করে। সেক্ষেত্রে এটি দেখতে এমন হবে:
var ViewModel = function() {
this.items = ko.observableArray();
this.removeItem = function(item) {
this.items.remove(item);
}.bind(this);
};
এই বিষয়টিতে আরও অনেক কিছু বলা যেতে পারে এবং অনেকগুলি নিদর্শন যা আপনি অন্বেষণ করতে পারেন (যেমন মডিউল প্যাটার্ন এবং মডিউল প্যাটার্ন প্রকাশ করে), তবে মূলত কোনও ফাংশন ব্যবহার করা আপনাকে কীভাবে বস্তুটি তৈরি হয় এবং রেফারেন্স করার ক্ষমতা সম্পর্কে আরও নমনীয়তা এবং নিয়ন্ত্রণ দেয় উদাহরণটি ব্যক্তিগত যে ভেরিয়েবল।
prototype
(যে পদ্ধতিগুলি প্রায়শই সার্ভার থেকে ডেটা আনা এবং সে অনুযায়ী ভিউ মডেলটি আপডেট করা হয়)। তবে আপনি তাদের স্পষ্টতই কোনও বস্তুর আক্ষরিক সম্পত্তি হিসাবে ঘোষণা করতে পারেন, তাই আমি সত্যিই কোনও পার্থক্য দেখতে পাচ্ছি না।