একটি পর্যবেক্ষণযোগ্য থেকে স্বয়ংক্রিয়ভাবে ট্রিগার না করে কীভাবে দৃশ্যের রিফ্রেশকে বাধ্য করবেন?


151

দ্রষ্টব্য: এটি বেশিরভাগ নকআউটজেএস ডিবাগিং এবং বোঝার জন্য।

(ইতিমধ্যে আবদ্ধ) ভিউ মডেল থেকে দৃশ্যটি রিফ্রেশ করার জন্য নকআউটকে স্পষ্টভাবে অনুরোধ করার কোনও উপায় আছে কি? আমি এরকম কিছু খুঁজছি:

ko.refreshView();

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

উত্তর:


252

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


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

এটি নিশ্চিত যে যদি অন্য কোনও কিছুর জন্য না থাকে তবে - ক্রোমে পরীক্ষা করা।
স্কট রোমাক

আপনার ভিউমোডেল নিজেই একটি পর্যবেক্ষণযোগ্য হতে পারে, যাতে আপনি myViewModel.valueHasMutated()সম্পূর্ণ দর্শন আপডেট করার জন্য কল করতে পারেন ।
রায় জে

2
এখানেও অ্যারেতে কাজ করে না। আসলে অ্যারে নকআউট এ মোটেই কাজ করছে বলে মনে হয় না। আমি
কৌনিকটি


25

কিছু পরিস্থিতিতে কেবল বাইন্ডিংগুলি মুছে ফেলা এবং তারপরে পুনরায় প্রয়োগ করা কার্যকর হবে:

ko.cleanNode(document.getElementById(element_id))
ko.applyBindings(viewModel, document.getElementById(element_id))

ইব্রাম সম্পাদনার জন্য ধন্যবাদ ... অনুমান করুন আমার উল্লেখ করা উচিত ছিল আমি কফিস্ক্রিপ্ট ব্যবহার করেছি ;-)
প্রোফনম্রোড

15
আপনি যদি jQuery ব্যবহার করেন তবে দেখুন (যেমন, অ্যাপ্লিকেশনটির বিটগুলি কোতে স্থানান্তরিত করার সময়) ক্লিননোড অন্যান্য ডোম ইভেন্টগুলিও সরিয়ে ফেলবে।
ড্যান রিভেল

এটি নিখুঁত। ভিউ মডেল প্রয়োগ করার পরে আমি নতুন ডোম বাচ্চাদের ডেটা-বাইন্ড বৈশিষ্ট্যগুলি সনাক্ত করতে পারি না।
অ্যান্ড্রু টি ফিনেল

পারফেক্ট! কাজ!
জেফ_ড্রামগড

0

আমি আমার বাইন্ডএইচটিএমএল নক আউট বাঁধাইয়ের হ্যান্ডলারটি দিয়ে এখানে একটি জেএসফিডাল তৈরি করেছি: https://jsfiddle.net/glaivier/9859uq8t/

প্রথমে বাইন্ডিং হ্যান্ডলারটিকে তার নিজস্ব (বা একটি সাধারণ) ফাইলে সংরক্ষণ করুন এবং নকআউটের পরে অন্তর্ভুক্ত করুন।

আপনি যদি এইটিকে আপনার বাইন্ডিংগুলি স্যুইচ করেন তবে:

<div data-bind="bindHTML: htmlValue"></div>

OR

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