ব্যাকবোন.জেএস পরামিতিগুলি নিয়ে আসে


152

ডকুমেন্টেশন অনুসরণ করে , আমি করেছি:

var collection = new Backbone.Collection.extend({
        model: ItemModel,
        url: '/Items'
})

collection.fetch({ data: { page: 1} });

ইউআরএল পরিণত হয়েছে: http://localhost:1273/Items?[object%20Object]

আমি এমন কিছু আশা করছিলাম http://localhost:1273/Items?page=1

সুতরাং আমি আনার পদ্ধতিতে কীভাবে প্যারামগুলি পাস করব?


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

আপনি চেষ্টা করতে পারেন JSON.stringify({ data: { page: 1} })?
জো

@ জো তাসকান, আমি কী করতে হবে তা সম্পর্কে নিশ্চিত নই, তবে আমি করেছি: collection.fetch(JSON.stringify({ data: { page: 1} }));এবং ইউআরএলে কিছুই পাস হয়নি ।
শন ম্লেয়ান

ঠিক আছে, এটি করুন: সংগ্রহ.ফেট্চ (: তথ্য: JSON.stringify ({পৃষ্ঠা: 1}););
জো

3
আপনি ব্যাকবোন 1.0 fyi
ডমিনিক

উত্তর:


213

পরিবর্তন:

collection.fetch({ data: { page: 1} });

প্রতি:

collection.fetch({ data: $.param({ page: 1}) });

কাজটি করার বাইরে তাই এটিকে আপনার {data: {page:1}}অবজেক্টের সাথে ডাকা হয়options

Backbone.sync = function(method, model, options) {
    var type = methodMap[method];

    // Default JSON-request options.
    var params = _.extend({
      type:         type,
      dataType:     'json',
      processData:  false
    }, options);

    // Ensure that we have a URL.
    if (!params.url) {
      params.url = getUrl(model) || urlError();
    }

    // Ensure that we have the appropriate request data.
    if (!params.data && model && (method == 'create' || method == 'update')) {
      params.contentType = 'application/json';
      params.data = JSON.stringify(model.toJSON());
    }

    // For older servers, emulate JSON by encoding the request into an HTML-form.
    if (Backbone.emulateJSON) {
      params.contentType = 'application/x-www-form-urlencoded';
      params.processData = true;
      params.data        = params.data ? {model : params.data} : {};
    }

    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
    // And an `X-HTTP-Method-Override` header.
    if (Backbone.emulateHTTP) {
      if (type === 'PUT' || type === 'DELETE') {
        if (Backbone.emulateJSON) params.data._method = type;
        params.type = 'POST';
        params.beforeSend = function(xhr) {
          xhr.setRequestHeader('X-HTTP-Method-Override', type);
        };
      }
    }

    // Make the request.
    return $.ajax(params);
};

সুতরাং এটি 'তথ্য' প্রেরণ করে jQuery.ajax যা ইউআরএল-এ যা কিছু আছে params.dataতা যুক্ত করার যথাসাধ্য চেষ্টা করবে ।


71

আপনি প্রক্রিয়াডাটা সত্যতেও সেট করতে পারেন:

collection.fetch({ 
    data: { page: 1 },
    processData: true
});

Jquery প্যারাম স্ট্রিংয়ে ডেটা অবজেক্টকে স্বয়ংক্রিয়ভাবে প্রক্রিয়া করবে,

তবে ব্যাকবোন.সিঙ্ক ফাংশনে, ব্যাকবোন প্রক্রিয়াটি ডেটা বন্ধ করে দেয় কারণ ব্যাকবোন পোস্ট, আপডেটের সময় ডেটা প্রক্রিয়া করার জন্য অন্যান্য পদ্ধতি ব্যবহার করবে ...

ব্যাকবোন উত্স:

if (params.type !== 'GET' && !Backbone.emulateJSON) {
    params.processData = false;
}

1

আপনি যদি টাইটানিয়াম অ্যালো ব্যবহার করেন তবে অন্য একটি উদাহরণ:

 collection.fetch({ 
     data: {
             where : JSON.stringify({
                page: 1
             })
           } 
      });

1
টাইটানিয়াম অ্যালোয় কী?
নিল

অ্যালোই অ্যাপসিলারেটর টাইটানিয়াম এসডিকে ( github.com/appcelerator/alloy ) জন্য এমভিসি কাঠামো
পপলাইন

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