আমি কীভাবে একটি মডেল.সেভ () এ সাফল্য কলব্যাকটি ট্রিগার করব?


106
this.model.save({
  success: function(model, response){
    console.log('success');
  },
  error: function(){
    console.log('error');
  }
})

মডেলটি সঠিকভাবে সার্ভারে পোস্ট করা হয়েছে যা সেভ পরিচালনা করে, তবে সাফল্য কলব্যাকটি বরখাস্ত হয় না। সার্ভার থেকে আমাকে কিছু পাঠানোর দরকার আছে কি?


7
দেখা যাচ্ছে যে আমি এটি ভুল করছিলাম: সঠিক বাক্য গঠনটি হওয়া উচিত: this.model.save (new আইটেম, {সাফল্য: ..., ত্রুটি: ...})
কচ্ছপ

8
'নাল' প্লেসোল্ডার হিসাবেও ঠিক কাজ করছে বলে মনে হচ্ছে।
আপক্রিক

@ ইউপি দ্য ক্রিক ধন্যবাদ যে সাহায্য করেছে। আমি উত্সের দিকে তাকিয়েছি এবং কী এবং মান হিসাবে একটি খালি স্ট্রিং পাস করেছি। আপনার পদ্ধতি যদিও ভাল।
প্রমোদ

@ ইউপি দ্য ক্রিক নল আমার জন্য কোনও কারণে কাজ করেনি তবে খালি
অ্যাট্রি

উত্তর:


123

সংরক্ষণের প্রথম যুক্তিটি হল মডেলটিতে সংরক্ষণ করার বৈশিষ্ট্যগুলি:

this.model.save( {att1 : "value"}, {success :handler1, error: handler2});

9
আমি একজন বাচ্চা বিভ্রান্ত - (1) আমি ভেবেছিলাম যে ব্যাকবোন সবসময় সংরক্ষণের সময় পুরো মডেলটি ফেরত পাঠায় (এটি আংশিক মডেল আপডেটগুলি পাঠানো সম্ভব নয়)। সুতরাং বৈশিষ্ট্য নাম-মানগুলির উদ্দেশ্য কী? (২) কিছু .set () গুলি সম্পাদন করার পরে যদি আপনি কেবল মডেলটি সংরক্ষণ করতে চান - তবে বৈশিষ্ট্য তালিকা কেন? (3) ডক্সে, বৈশিষ্ট্য তালিকা প্যারামকে .চ্ছিক হিসাবে দেখানো হয়েছে। আপনি কি স্পষ্ট করতে পারেন? ধন্যবাদ।
আপক্রিক

7
আপনি আপনার বৈশিষ্ট্যগুলির সাথে একটি সেট "সেট" করতে পারেন এবং তারপরে কোনও বৈশিষ্ট্য ছাড়াই একটি সঞ্চয় করতে পারেন। মডেলের সমস্ত বৈশিষ্ট্য সর্বদা সার্ভারে প্রেরণ করা হয়। বৈশিষ্ট্যগুলি সহ সংরক্ষণ করুন + সংরক্ষণ করুন সেট করার জন্য একটি শর্টকাট।
জুলিয়েন

5
নির্বোধ যেহেতু মনে হয় এটি ঠিক তাই করে, লজ্জাজনকভাবে এটি নথিভুক্ত।
কেভিন

51
আমার পরীক্ষায় এটি উপস্থিত হয় যে আপনি "গুণাবলী" প্যারামিটারের জন্য কিছু পাস না করলে সাফল্য এবং ত্রুটি কলব্যাকগুলি সরিয়ে দেওয়া হয় না। এটি ডকুমেন্টেশনের সাথে বিরোধী বলে মনে হচ্ছে ... মডেল.স্যাভ ([বৈশিষ্ট্য], [বিকল্পগুলি]) উল্লেখ করবে যে বৈশিষ্ট্যগুলি alচ্ছিক। আমি যখন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করি বা বৈশিষ্ট্যগুলির জন্য শূন্য করি তখন আমার সাফল্য এবং ত্রুটি কলব্যাকগুলি বরখাস্ত করা হয়। আমি যখন বৈশিষ্ট্যের জন্য কিছু অন্তর্ভুক্ত করি না, কলব্যাকগুলি বরখাস্ত করা হয় না।
কেভিন

6
ব্যাকবোন.জেএস [ backbonejs.org/docs/backbone.html ] এর উত্স কোডটি পরীক্ষা করে । মনে হয় এটি অ্যাটর বাধ্যতামূলক .. যদি কেবল 'অপশন' সরবরাহ করা হয় তবে ফাংশনগুলি এটি 'অ্যাটর' হিসাবে ধরে নেয় এবং কলটি
মিস করবে

58

কোনও অজানা কারণে, উপরের কোনও পদ্ধতিই আমার পক্ষে কাজ করে নি। আমার ক্ষেত্রে কেবল এপিই আঘাত করা হয়নি।

তবে পরে এটি অনুসন্ধান করার সময়, আমি এই লিঙ্কটিতে ধাক্কা দিয়েছি , যেখানে প্রথম প্যারামিটার হিসাবে nullপরিবর্তে কেউ চেষ্টা করেছে {}

this.model.save(null, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

সুতরাং, এটি আমার জন্য কাজ করেছে। আশা করি এটি আপনাকেও সহায়তা করবে।


3
এটা সঠিক উত্তর. আপনি যদি নালিতে পাস করেন তবে ব্যাকবোন সমস্ত বৈশিষ্ট্য সংরক্ষণের জন্য সার্ভারে প্রেরণ করবে।
পল অলিভার

অদ্ভুত কৌতুক কিন্তু আমার নির্বাচিত পদ্ধতি।
ম্যাট ফ্লেচার

37

আপনার সার্ভার অবশ্যই একটি JSON অবজেক্ট ফেরত দিতে হবে। যদি প্রতিক্রিয়াটি কোনও JSON অবজেক্ট না হয়, কলব্যাকগুলি ফায়ার হবে না।

সাফল্যের জন্য যদি আপনার সার্ভার কোনও JSON অবজেক্ট ফেরত না দেয় তবে ডেটা টাইপের সাহায্যে একটি সংরক্ষণ করুন : "পাঠ্য" বিকল্পটি এর মতো:

this.model.save([],{
 dataType:"text",
 success:function() {},
 error:function() {}
});

এই বিকল্পের সাহায্যে এটি জেএসএনের প্রতিক্রিয়া হিসাবে অপেক্ষা করবে না, তবে একটি পাঠ্য, এবং এইভাবে কলব্যাক চালু হবে।


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

এই আমার গাধা বাঁচাতে। আমি এক্সপ্রেস 4 এর সাথে রেজ.জসন ({সাফল্য: ফলাফল}) ব্যবহার করছিলাম এবং এটি এখনও আমাকে সমস্যা দিচ্ছিল। সম্ভবত আমার যা করা দরকার: রেজ.জসন ({"সাফল্য": "ফলাফল"}) বা অন্য কিছু ...
আলেকজান্ডার মিলস

অনেক ধন্যবাদ! এটা আমার দিন তৈরি।
alcfeoh

11

নীচের অংশে ইতিমধ্যে এর উপর নির্ভরশীল হিসাবে আপনি নীচে নিম্নরূপ ব্যবহার করতে পারেন। মনে রাখবেন সংরক্ষণের প্রথম যুক্তিতে হয় বৈশিষ্ট্য থাকতে হবে অথবা আপনি নিজেই মডেলটি সংরক্ষণ করতে চান এমন ক্ষেত্রে pass pass পাস করতে পারেন।

this.model.save({}, _.bind(function(model, response){
  //Do whatever you want e.g.
  this.collection.add(model)
}, this))

8

তাই আমি কিছুটা বিভ্রান্ত হয়ে পড়েছি - একটি সেভ ইভেন্ট কল করার জন্য আমাকে কী এখনও সমস্ত বৈশিষ্ট্যে পাস করতে হবে? আমার মডেলটি যদি বড় হয় তবে আমি প্রতিটি সম্পত্তি ম্যানুয়ালি সেট করতে চাই না

আমি কল করছি মডেল.সভ এবং নিম্নলিখিতগুলি করার চেষ্টা করছেন:

this.model.save(
    {
        success: function (model, response) {
            console.log('model saved');
        }
    });

ঠিক আছে আমার নিজের প্রশ্নের উত্তর দেওয়ার জন্য যদি কেউ এই পোস্টটি খুঁজে পায় তবে আমি নিম্নলিখিতটি যা কাজ করে তা করলাম:

this.model.save({ id: this.model.get('id') },
    {
        success: function (model, response) {
            console.log("success");
        },
        error: function (model, response) {
            console.log("error");
        }
    });

সম্পাদনা: আমি কোনও কারণে আপনাকে উত্তর দিতে পারিনি, তবে আমি সম্পাদনা করতে পারি

তবে আপনাকে আইডি সেট করতে হবে না: this.model.get('id')আপনি কেবল একটি ফাঁকা বস্তুটি পাস করতে পারবেন কারণ একটি ফাঁকা বৈশিষ্ট্য কেবল গুণাবলী বাড়িয়ে দেয় না, কিছুই করে না:

this.model.save({}, {
    success: function (model, response) {
        console.log("success");
    },
    error: function (model, response) {
        console.log("error");
    }
});

4

নীচেরটি আমি কোডবোন মডেল সংরক্ষণের জন্য ব্যবহার করছি is

this.model.save(model,{
   success:function(model){
       console.log("Saved Successfully");
   },
   error:function(model){
       console.log("Error");
   }
});

চিয়ার্স

রায় এমজে


এটা কিছুটা একটি স্থানীয় পাস বিক্ষেপী modelএকটি থেকে this.model.. modelহওয়া উচিত attributes, যা সেট এবং সবকিছু সহ সংরক্ষিত হয়this.model
Funkodebat

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

ঠিক আছে, সত্য, না, আপনি সেভ কল করার সময় মডেলটি পাস করেন না। সংরক্ষণের প্রথম যুক্তি হ'ল অতিরিক্ত বৈশিষ্ট্য যা আপনি সেভ কল করার আগে সেট করতে পারেন। এটা ফোন করার মত হবে model.set(model.toJSON()); model.save()। মডেলটি কী সেট করা আছে তার কোনও মডেল সেট করার কোনও কারণ নেই .. সংরক্ষণ করার সময় এটি কোনও মডেলকে নিজের নিকটে পৌঁছে দেওয়া অপ্রয়োজনীয় রূপ ep
ফানকোডাব্যাট

2
@ ফঙ্কোডব্যাট আমি এই 3 বছরের পুরানো উত্তরে আপনার পরিবর্তনগুলি প্রত্যাখ্যান করেছি কারণ তারা লেখকের প্রতিক্রিয়া আমূল পরিবর্তন করেছে। এটি সম্পাদনা / সংযোজন সিস্টেমের উদ্দেশ্য নয়। উত্তরটি যদি আর প্রাসঙ্গিক না হয় বা উপযুক্ত ভোট দেয় তবে এটিকে লিখুন এবং একটি নতুন লিখুন। সংযোজন সরঞ্জামগুলি ব্যাকরণ, ফর্ম্যাটিং, বানান এবং মূলধন নির্ধারণের জন্য - অন্য ব্যবহারকারীদের উত্তরগুলি সামঞ্জস্য করার জন্য নয়।
পৌঁছনো থেইলজাররা

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

1

বৈশিষ্ট্যগুলি আপডেট না করে যারা একটি মডেল সংরক্ষণ করতে চান তাদের জন্য, আপনি নিম্নলিখিতগুলি করতে পারেন:

model.once("sync", function(model, response, options){
    //
});
model.once("error", function(model, response, options){
    //
});
model.save();

1

আপনি ফাংশনটি আরম্ভ করার সময়, সিঙ্ক পদ্ধতিটি এমন কোনও পদ্ধতির সাথে সংযুক্ত করুন যা আপনি নির্ধারণ করেন (onSaveSuccess)

            initialize: function (options) {
                    this.model.on('sync', _.bind(this.onSaveSuccess, this));
},
            onSaveSuccess: function() {
                console.log('saved');
                this.render();
            },

এইভাবে, যে কোনও সময় আপনি এই.মোডেল.সেজ () চালান, আপনার সিঙ্কটি সফল হলে এটি কলব্যাক হিসাবে অনসাইভসেসেস ফাংশনটি চালাবে if

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