Не равномерный порядок аргументов в триггерах событий магистрали. Как я могу обойти это? - PullRequest
1 голос
/ 27 января 2012
someModel.bind("all", function(eventName, model, XXXXX, YYYYY) {
   options.myStuff = "MyStuff et all";
   self.trigger(eventName, model, ??????, ?????);
}

XXXXX, ГГГГ, ????? отметить проблему: где варианты?

Я хочу расширить параметры и запустить любое событие в новом контексте. Проблема в том, что магистраль помещает опции в 4-ю позицию в некоторых событиях («change: xxx», «error» и т. Д.) И в 3-ю позицию в некоторых других («change», «reset»), делая невозможным знать, где в аргументах параметры, и чтобы знать, где в триггере я должен поместить расширенные параметры. Есть ли другой способ, кроме очевидного отдельного фрагмента для каждого отдельного события?

ОБНОВЛЕНИЕ: Глядя на основной источник, для меня приемлемым решением было бы исправление Backbone, чтобы всегда включать третий аргумент в каждом событии, чтобы опции всегда были в одной и той же 4-й позиции. Это простое изменение, но я надеюсь на более простое решение для пользователя.

1 Ответ

4 голосов
/ 27 января 2012

Насколько я могу судить, параметры всегда являются последним аргументом, переданным обратному вызову.Вы можете использовать объект arguments обратного вызова для изменения параметров.https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope/arguments

Например

var x=new Backbone.Model();
x.bind("all", function(e) {
    console.log("x : "+e);
    console.log(arguments[arguments.length-1]);
});

var m=new Backbone.Model( {name:"a"} );
m.bind("all",function(e){
    console.log("m : "+e);
    var args=Array.prototype.slice.call(arguments);

    args[args.length-1].modified=true;
    x.trigger.apply(x,args);
});

m.set({name:"b"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...