javascript - una - Problema al hacer referencia a la variable en el método Collections.where dentro de la función render
variables de investigacion pdf (1)
Aunque no está documentado explícitamente, Collection#where
usa igualdad estricta ( ===
) cuando se busca. Del buen código fuente :
where: function(attrs, first) {
if (_.isEmpty(attrs)) return first ? void 0 : [];
return this[first ? ''find'' : ''filter''](function(model) {
for (var key in attrs) {
if (attrs[key] !== model.get(key)) return false;
}
return true;
});
},
observe el attrs[key] !== model.get(key)
dentro de la función de devolución de llamada, que no considerará 10
(un valor probable de id
) y ''10''
(un valor de búsqueda probable extraído de una <input>
) para ser un partido. Eso significa que:
customers.where({musketeerId: 10});
podría encontrar algo mientras que:
customers.where({musketeerId: ''10''});
acostumbrado.
Puede sortear este tipo de cosas con parseInt
:
// Way off where you extract values from the `<input>`...
options.id = parseInt($input.val(), 10);
Me he encontrado con un problema con un código de red troncal. El código a continuación se refiere a una función de renderizado. Puedo recuperar todos los modelos. Mi problema surge cuando trato de utilizar el método "Collections.where" en la línea marcada número # 1. Como puede ver, he pasado un literal de objeto a la función de renderizado, pero por alguna razón no puedo hacer referencia al método customers.where en la línea n.º 1. Cuando le doy a este método un número literal como 45, funciona. ¿Hay alguna forma de evitar esto para poder pasar la referencia de variable en?
Muchas gracias
render: function(options) {
var that = this;
if (options.id) {
var customers = new Customers();
customers.fetch({
success: function (customers) {
/* #1 --> */ var musketeers = customers.where({musketeerId: options.id});
console.log(musketeers.length) //doesn''t work as options.id is failing on last line
var template = _.template($(''#customer-list-template'').html(), {
customers: customers.models
});
that.$el.html(template);
console.log(customers.models);
}
});
} else {
var template = _.template($(''#customer-list-template'').html(), {});
that.$el.html(template);
}
}