কিভাবে backbone.sync ওভাররাইড করবেন?


145

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

ডকুমেন্টেশনে নিজেই এটি কীভাবে করবেন তার উদাহরণ নেই এবং ব্যাকবোনটির জন্য গুগল গ্রুপ বলে মনে হয় না ... কেউ কি এটি করার জন্য একটি উদাহরণ নির্দেশ করতে পারে?


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

উত্তর:


225

এই টীকাযুক্ত উত্স উদাহরণটি একবার দেখুন যেখানে তারা Backbone.syncলোকালস্টোরেজ বিকল্পের সাথে ওভাররাইট করে

মেরুদন্ড-localStorage

মূলত ব্যাকবোন.সেন্সকটি এমন একটি ফাংশন হওয়া উচিত যা 4 টি আর্গুমেন্ট গ্রহণ করে:

Backbone.sync = function(method, model, options) { };

আপনাকে গুলি করতে হবে options.successবা সফল options.errorহয়েছে কিনা তার উপর নির্ভর করে fire methodপদ্ধতিগুলি বিন্যাসে রয়েছে:

  • "create" : প্রত্যাশিত যে আপনি সার্ভারে মডেল তৈরি করেন
  • "read" : প্রত্যাশিত যে আপনি এই মডেলটি সার্ভার থেকে পড়েছেন এবং এটি ফিরিয়ে দিয়েছেন
  • "update" : প্রত্যাশা করা হয়েছে যে আপনি আর্গুমেন্টের সাহায্যে সার্ভারে মডেলটি আপডেট করবেন
  • "delete" : আপনি সার্ভার থেকে মডেল মুছে ফেলা আশা।

আপনাকে এই 4 টি পদ্ধতি বাস্তবায়ন করতে হবে এবং আপনার জন্য যা কিছু চান তা নির্ধারণ করতে হবে "server"

অবশ্যই এইগুলি কেবলমাত্র বাস্তবায়ন করতে Backbone.sync হবে । আপনি আরও প্রয়োগ methodsকরতে পারেন এবং আপনি আরও পরামিতিগুলিতে ফিরে যেতে পারেন successতবে এটি না করা ভাল best

এটি Backbone.syncবর্তমানে যেমন একই রকম হয় তা নিশ্চিত করা ভাল যাতে আপনার প্রোগ্রামিংটি ইন্টারফেসের পরিবর্তে বাস্তবায়ন হয়। Backbone.syncলোকালস্টোরেশন এক হিসাবে আপনি যদি নিজের সংশোধিত পরিবর্তনটি পরিবর্তন করতে চান তবে আপনার নিজের বর্ধিত ব্যাকবোন.সেনসিটির সাথে মেলে নিজেকে এটিকে বাড়িয়ে দিতে হবে না "

[সম্পাদনা]

এছাড়াও আপনি একাধিক বাস্তবায়ন ব্যবহার করতে পারেন তা নোট করুন sync। প্রতিটি রেফারেন্স Backbone.syncঅ্যাক্টোলিউলি (this.sync || Backbone.sync)তাই আপনাকে ঠিক এর মতো কিছু করতে হবে:

var MyModel = Backbone.Model.extend({ 
    ...

    "sync": myOwnSpecificSync,

    ...
});

Backbone.syncমডেলগুলির কোনও syncনির্দিষ্ট পদ্ধতি নির্ধারিত না হলে সমস্ত মডেলই কেবলমাত্র ডিফল্ট গ্লোবাল হ'ল ।


2
আমি যদি লোকালস্টোরেজ থেকে কোনও মডেল আনতে চাই এবং অন্য একটি সার্ভার থেকে আনা হয় তবে কী হবে? এটা কি এখনও সম্ভব?
পিকার্ডো

19
(this.sync || Backbone.sync)সম্পাদনা দেখুন। আরও একটি টিপ হ'ল ব্যাকবোনটির টীকাযুক্ত উত্সটি পড়ুন। সব আছে!
রায়নস

3
প্রতিটি মডেলের নিজস্ব সিঙ্ক থাকা সম্পর্কে [সম্পাদনা] করার পরে বিশদটি অত্যন্ত গুরুত্বপূর্ণ! ধন্যবাদ!
হেবল

26
আপনি নির্দিষ্ট মডেলের সিঙ্ক পদ্ধতিতে ওভাররাইড করতে পারেন এই বিষয়টি উল্লেখ করার জন্য +1।
চেতন

12
কেবল একটি সংযোজন: আপনি যদি syncআপনার কোডের যে কোনও জায়গা থেকে (সাধারণত একটি ওভাররিডডেন sync) "ডিফল্ট" বলতে চান তবে কেবল একটি করুন Backbone.sync.call(this, method, this, options)
অসমমিতি

15

আমি জানি এই উত্তরটি কিছুটা দেরী হয়েছে, এবং @ রায়নসের উত্তরটি দুর্দান্ত, তবে আমি এটি কিছুটা ভিন্নভাবে করেছি এবং সম্ভবত এটি আপনার জন্য বা ব্যাকবোন সহ কোনও এপিআই ব্যবহার করার চেষ্টা করা অন্য কোনও ব্যক্তির পক্ষে কার্যকর হবে।

ব্যাকবোন.সেন্সকে ওভাররাইড করার পরিবর্তে, আমি ব্যাকবোন.জ্যাক্সকে ওভাররাইড করেছি , কারণ এজ্যাক্সটি এখানেই করা হয়েছে।

এখানে একটি উদাহরণ:

// Set the default implementation of `Backbone.ajax` to proxy through to `$`.
Backbone.ajax = function() {
    var args = Array.prototype.slice.call(arguments, 0);

    // Here, I add the OAuth token (or any other token)
    // But before, I check that data exists, if not I add it
    if (args[0]['data'] === undefined) {
        args[0]['data'] = {};
    }
    args[0]['data']['token'] = 'any_api_token_here';

    return Backbone.$.ajax.apply(Backbone.$, args);
};

11

আমার সাধারণত syncযখন কিছু নির্দিষ্ট বৈশিষ্ট্যগুলি সিঙ্ক করতে হয় তখন আমার সাধারণত ব্যাকবোন পদ্ধতিটি ওভাররাইড করতে হয়। একটি সাধারণ বাস্তবায়ন এর মত দেখাচ্ছে:

sync: function (method, model, options) {
  options.data = _.pick(this.attributes, 'foo', 'bar', 'baz');
  return Backbone.sync.call(this, method, model, options);
}

এবং এটি মডেল বা সংগ্রহের মধ্যে যায়।
গ্যাবে রেইনবো

3
অপ্রাপ্তবয়স্কদের পরামর্শ: সেই শেষ পংক্তিতে পরিবর্তন কী Backbone.sync.apply(this, arguments);? আপনি যদি উদাহরণস্বরূপ, এর ওভাররাইড সংস্করণে "বিকল্পগুলি" যুক্তিটি ছেড়ে দেওয়ার সিদ্ধান্ত নেন তবে এটি কিছুটা নমনীয় sync
লোচলান

এই প্রশ্নের ভবিষ্যতের সন্ধানকারীদের জন্য আরও কিছু: ব্যাকবোন.সেনসি একটি লা ব্যাকবোনজএস.আরসিড
ডকস /

1
আপনি Backbone.model.save(attributes, {patch: true})এখন আংশিক আপডেট করতে ব্যবহার করতে পারেন
রবারবুরকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.