Ich benutze Knockout, um eine benutzerdefinierte Bindung für analytics.track zu erstellen, aber es scheint Probleme zu haben. Es scheint, wenn der analytics.track in mehr als zwei Funktionen verschachtelt ist, schlägt der Track-Aufruf stillschweigend fehl. Es trifft den Rückruf nicht und es meldet nicht in Segment-Debugger. Ich habe 2 Beispiele zur Verfügung gestellt, das Problem demonstriert hier:Wie man analytics.js von segment.io in einer Knockout-benutzerdefinierten Bindung verwendet
ohne Verschluss (Werke):
function sendTrack(event, props) {
console.log("Enter sendTrack");
analytics.track('Signed Up', {
plan: 'Enterprise'
}, {}, function() {
console.log('track callback logged');
});
}
ko.bindingHandlers.segmentTrack = {
init: function (element, valueAccessor) {
console.log("Init");
var value = ko.unwrap(valueAccessor());
ko.applyBindingsToNode(element, { click: sendTrack });
}
};
ko.applyBindings({});
Mit Verschluss (nicht funktioniert):
(function(ko, $, analytics){
'use strict';
function sendTrack(event, props) {
console.log("Enter sendTrack");
analytics.track('Signed Up', {
plan: 'Enterprise'
}, {}, function() {
console.log('track callback logged');
});
}
ko.bindingHandlers.segmentTrack = {
init: function (element, valueAccessor) {
console.log("Init");
var value = ko.unwrap(valueAccessor());
ko.applyBindingsToNode(element, { click: sendTrack });
}
};
ko.applyBindings({});
})(window.ko, window.jQuery, window.analytics);
Edit1: Beachten Sie auch, das funktioniert mit wenn ich die analytics.track init bewegen:
(function(ko, $, analytics){
'use strict';
ko.bindingHandlers.segmentTrack = {
init: function (element, valueAccessor) {
console.log("Init");
analytics.track('Signed Up', {
plan: 'Enterprise'
}, {}, function() {
console.log('track callback logged');
});
}
};
ko.applyBindings({});
})(window.ko, window.jQuery, window.analytics);
Bitte geben
Ihre letzte Änderung hat meine Antwort ungültig gemacht (ich bin mir nicht sicher, ob ich sie löschen oder sie dort für andere belassen soll, die darin Verwendung finden könnten). Mit deinem letzten Beitrag denke ich, dass es unmöglich ist, zu erzählen, was vor sich geht. Du solltest ein [mcve] erstellen und die Frage damit aktualisieren, weil ich derzeit vermute, dass das Problem in etwas liegt (load order, code, etc), das nicht im Post angezeigt wird. – Jeroen