underscore template backbonejs javascript backbone.js

javascript - template - Backbone.js recupera con parámetros



backbonejs github (4)

Otro ejemplo si está utilizando aleación de titanio:

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

Siguiendo la documentation , lo hice:

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

la url resultó ser: http://localhost:1273/Items?[object%20Object]

Esperaba algo como http://localhost:1273/Items?page=1

Entonces, ¿cómo paso los parámetros en el método fetch?


También puede establecer processData en verdadero:

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

Jquery procesará automáticamente el objeto de datos en cadena param,

pero en la función Backbone.sync, Backbone apaga el processData porque Backbone usará otro método para procesar datos en POST, UPDATE ...

en la fuente Backbone:

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


cambiando:

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

a:

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

Entonces, sin hacerlo, se llama con el objeto {data: {page:1}} como 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); };

Por lo tanto, envía los "datos" a jQuery.ajax que hará todo lo posible para agregar lo que sea params.data a la URL.


try { // THIS for POST+JSON options.contentType = ''application/json''; options.type = ''POST''; options.data = JSON.stringify(options.data); // OR THIS for GET+URL-encoded //options.data = $.param(_.clone(options.data)); console.log(''.fetch options = '', options); collection.fetch(options); } catch (excp) { alert(excp); }