gpt4 book ai didi

javascript - 如何使用 Marionette.Callbacks

转载 作者:行者123 更新时间:2023-12-02 18:10:20 25 4
gpt4 key购买 nike

我正在学习Marionette.js。我正在尝试运行特定的上下文回调,因为我创建了 2 个具有不同上下文的回调。

var callback1=new Backbone.Marionette.Callbacks();
callback1.add(function(argu1){alert("This is first context"+argu1.parameters)},"context1");
callback1.add(function(argu1){alert("This is second context"+argu1.parameters)},"context2");
//I want to run only callback which one have context is `context1`.
callback1.run({parameters:"Gran"},"context1");

根据我的要求,我应该只收到第一个上下文警报。但我收到了两个警报框。

我该如何解决这个问题。

谢谢

最佳答案

这实际上不是 Marionette Callbacks 的正确用法。这些回调基本上是一个队列,运行时将调用您添加的所有回调,无需任何条件。

第二个参数不是您要运行的回调的名称,而是运行时将应用于该回调的上下文(this 的值)。当您使用callback.add定义自定义上下文时,callback.run的第二个参数将被忽略。

在此处查看有关回调的文档:https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.callbacks.md

我认为您真正想要的是 Marionette 命令:https://github.com/marionettejs/backbone.wreqr#commands

使用命令,您可以注册函数,然后可以通过名称调用这些函数。此替代方案的唯一问题是您无法提供将应用于命令的单独上下文对象。

如果这是一个要求,那么您应该能够通过使用命令对象自行创建此功能,就像使用 _.bind 一样:

var commands = new Backbone.Wreqr.Commands();

var context = { n: 55 };

commands.setHandler("foo", _.bind(function() {
console.log(this); // outputs { n: 55 }
}, context));

commands.execute("foo");

如果您需要在执行时传递上下文,您可以执行如下操作:

var handler = function(n) {
console.log(this); // outputs { test: "hey" }
console.log(n); // outputs 55
};

commands.setHandler("foo", function(context) {
// only apply the arguments after the context (if any);
handler.apply(context, Array.prototype.slice.apply(arguments).slice(1));
});

commands.execute("foo", { test: "hey" }, 55);

希望这有帮助!

关于javascript - 如何使用 Marionette.Callbacks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com