Vinculando una devolución de llamada en Backbone.js y Underscore.js
-
27-10-2019 - |
Pregunta
Tengo el siguiente código:
initialize: function() {
_.bindAll(this);
var callBack = function(res) {
window.item = new Item(res);
this.render();
};
_.bind(callBack, this);
$.get('/item/parse', {
uri: decodeURIComponent($.urlParam('uri')),
title: decodeURIComponent($.urlParam('title'))
},
callBack
);
},
La intención es que Render () debe llamarse después de que finalice la función $ .get. Sin embargo, incluso después de vincular la función de devolución de llamada con _.bind, todavía obtengo "el objeto no tiene ningún renderizado" en la consola. ¿Estoy usando BIND incorrectamente aquí?
Solución
_.bind
Devuelve una nueva función, entonces:
callBack = _.bind(callBack, this);
También puedes usar _.bindAll
, pero tienes que llamarlo después Defines la función. De lo contrario, no hay funciones en el momento en que llame _.bindAll
. Tenga en cuenta que tiene que usar this.callBack = ...
en ese caso, porque de lo contrario this
No consistirá en ninguna función.
Usando ambos _.bind
y _.bindAll
es superfluo.
Otros consejos
Por lo general, escribo un método de 'Carga' en mi modelo que doy una devolución de llamada como parámetro. Luego llamo a este método desde el método render () en la vista y hago lo que sea necesario en la función de devolución de llamada (por supuesto, esa devolución de llamada se activa en el modelo después de que se han cargado los datos).