আংশিক দৃশ্যের সাথে বাঁধতে আপনি কি কল.অ্যাপলাইন্ডিংস কল করতে পারেন?


257

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

ডায়ালগ সামগ্রীর জন্য এইচটিএমএলটি এজেএক্স ব্যবহার করে পুনরুদ্ধার করা হয়েছে যাতে ko.applyBindingsঅনুরোধটি শেষ হয়ে গেলে আমি কল করতে সক্ষম হতে চাই এবং আমি চাইল্ড ভিউ মডেলটি ডায়ালগ ডিভের ভিতরে এজ্যাক্সের মাধ্যমে লোড করা এইচটিএমএলের কেবলমাত্র অংশে আবদ্ধ করতে চাই।

এটি কি আসলেই সম্ভব বা পৃষ্ঠার শুরুতে লোড হওয়ার পরে আমার ko.applyBindingsএকবারে সমস্ত দৃশ্য এবং মডেলগুলি দেখার দরকার আছে এবং একবার একবার কল করার পরে?

উত্তর:


430

ko.applyBindings রুট হিসাবে ব্যবহার করার জন্য একটি দ্বিতীয় পরামিতি গ্রহণ করে যা একটি ডিওএম উপাদান।

এটি আপনাকে এমন কিছু করতে দেয়:

<div id="one">
  <input data-bind="value: name" />
</div>

<div id="two">
  <input data-bind="value: name" />
</div>

<script type="text/javascript">
  var viewModelA = {
     name: ko.observable("Bob")
  };

  var viewModelB = {
     name: ko.observable("Ted")
  };

  ko.applyBindings(viewModelA, document.getElementById("one"));
  ko.applyBindings(viewModelB, document.getElementById("two"));
</script>

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


17
আপনি যদি রাস্তায় কিছুটা সময় বাঁধাই মুছতে চান তবে আপনি ডায়ম থেকে ko.cleanNode(document.getElementById("one")জিনিস পরিষ্কার করতে বা ko.removeNode(document.getElementById("one")জিনিস পরিষ্কার করতে এবং নোড সরাতে কল করতে পারেন ।
মাইকেল বারকম্পাস

7
শুধু একটি দয়া করে মনে রাখবেন cleanNodeএবং removeNodeইভেন্ট হ্যান্ডলার সরায় না, তাই কিছু সতর্কতা অবলম্বন করুন। কিছু ক্ষেত্রে, সেই অঞ্চলগুলিতে templateবা withবাঁধাই ব্যবহার করা ভাল , তাই আপনার কাছে নতুন উপাদান সরবরাহ করা হয়েছে।
আরপি নেইমায়ার

7
এটি বর্তমানে কো-র অভাবের বিষয়। আমরা বিশেষভাবে লোকদের বিভাগগুলি "পুনঃত্যাগ" করতে চাই না। যাইহোক, কেও jQuery ব্যবহার করে ইভেন্টগুলি সংযুক্ত করে, যদি এটি রেফারেন্স করা হয় তবে আপনি $(element).unbind();সমস্ত হ্যান্ডলারের অপসারণ করতে পারেন।
আরপি নেইমায়ার

5
এই ফাংশনগুলি (প্রয়োগবাইন্ডিংস, ক্লিননড, রিমুভনোড) নথিভুক্ত কোথায়? নকআউটজেএস.কম এ আমি তাদের ফাংশন স্বাক্ষরগুলি খুঁজে পাচ্ছি না।
এরিকপি

2
যদি ডকুমেন্টেশনের মধ্যে এটি সহজে কোথাও লোকেশনযোগ্য হয় nice এমনকি আমি এর উল্লেখও দেখতে পাইনি।
ট্র্যাভিস কাউফম্যান

61

যদিও নিমিমিয়ার উত্তর প্রশ্নের আরও সঠিক উত্তর, আপনি নিম্নলিখিতগুলিও করতে পারেন:

<div>
  <input data-bind="value: VMA.name" />
</div>

<div>
  <input data-bind="value: VMB.name" />
</div>

<script type="text/javascript">
  var viewModels = {
     VMA: {name: ko.observable("Bob")},
     VMB: {name: ko.observable("Ted")}
  };

  ko.applyBindings(viewModels);
</script>

এর অর্থ হল আপনাকে ডিওএম উপাদান নির্দিষ্ট করতে হবে না এবং আপনি এমনকি একাধিক মডেলকে একই উপাদানের সাথে আবদ্ধ করতে পারেন, যেমন:

<div>
  <input data-bind="value: VMA.name() + ' and ' + VMB.name()" />
</div>

4
আপনি পৃষ্ঠার অঞ্চলগুলি পৃথক মডেলগুলিতে বরাদ্দ করতে "উইথ" ব্যবহার করতে পারেন - ডেটা-বাইন্ড = "সাথে: ভিএমএ"
লেজিকস্কোপ

3
@ ফ্ল্যামিংপেনগুইন: হ্যাঁ, তবে withসস্তা আসবে না, দেখুন: লিংক

7

আমি রানটাইমের সময় কোনও উপাদানকে একটি কাস্টম মডেল বাঁধতে পরিচালিত করেছি। কোডটি এখানে: http://jsfiddle.net/ZiglioNZ/tzD4T/457/

মজার বিষয় হ'ল আমি যে উপাদানটি সংজ্ঞায়িত করি নি তার সাথে ডেটা-বাইন্ড অ্যাট্রিবিউটটি প্রয়োগ করি:

    var handle = slider.slider().find(".ui-slider-handle").first();
    $(handle).attr("data-bind", "tooltip: viewModel.value");
    ko.applyBindings(viewModel.value, $(handle)[0]);

কো ২.৩ নিয়ে সমস্যা হচ্ছে, উপরের কোডটি গ্রাহক হ্যান্ডলারের মধ্যে রয়েছে যা আমি যখন বিশ্বব্যাপী কো.এপপ্লাইবাইন্ডিংস () প্রয়োগ করি তখন কল হয়। সুতরাং এখন আমি ত্রুটি পেয়েছি "আপনি একই উপাদানটিতে একাধিকবার বাইন্ডিং প্রয়োগ করতে পারবেন না"। আমি এখনও ত্রুটিটি কেন পাই তা জানার চেষ্টা করছি। আমরা কি একই ভেরিয়েবলকে একাধিক বার, প্রতিটি বিভিন্ন উপাদানকে একটি বাধ্যতামূলক প্রয়োগ করতে পারি না?
ZiglioUK

এখানে কো ২.৩ সহ সংস্করণ রয়েছে যা কাজ করে না: jsfiddle.net/ZiglioNZ/tzD4T/458
ZiglioUK

আংশিক দৃশ্যে বাইন্ডিং আবেদন করার আগে ko.cleanNode () এ একটি কল যুক্ত করা সাহায্য করবে বলে মনে হচ্ছে না: jsfiddle.net/ZiglioNZ/tzD4T/459
ZiglioUK

সমাধান হয়েছে: আমার এমনকি অ্যাপ্লিকেশনগুলি কল করার প্রয়োজন নেই!
ZiglioUK

ive সবেমাত্র নকআউটজেস উত্স কোড সম্পাদনা করেছে এবং সেই অংশটি মন্তব্য করেছে যেখানে ফাংশনটি "আপনি একই উপাদানটির সাথে একাধিক বার বাইন্ডিং প্রয়োগ করতে পারবেন না।", এখন সমস্ত কাজ ঠিক আছে ... আমি জানি এটি একটি নোংরা সমাধান তবে লাইব্রেরিতে আমি নতুন তাই আমি জানি না কীভাবে এটি আমার সমস্যার জন্য একাধিকবার প্রয়োগ করা যায় না।
জিওমরিলো

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