我可以不使用 eventproxy 直接调用 behaviors 方法吗?

Can I call behaviors methods directly without eventproxy?

我正在寻找从视图内部调用 Marionette 的 behaviors 中定义的方法的替代方法。

肯定有 eventproxy 但也许直接调用该方法更直观,例如:

view.behaviorsMethod();

我可以分配它:

view.method = behavior.method;

我可以检查 重新分配 因为它可能会给其他人带来意想不到的结果:

view.method = (view.method !== undefined ? view.method : behavior.method);

但这似乎不是一种优雅的方式。

你的问题的答案是你不能直接这样做,但总有办法。 你可以使用 _.invoke(this._behaviors, 'yourMethodName') 来做到这一点,但我不鼓励使用它 自

  1. _behaviors 是 Marionette.View class 的私有变量,它的名称可以更改,也可以在即将发布的版本中删除

  2. 您必须为该方法设置上下文,因为 _.invoke 不会设置 正确方法的上下文。

如果您可以正确设置上下文,那么这对您有用。

正如@ThePaxBisonica 在评论中所建议的 我会建议你使用混合模式,你可以从中扩展你的行为和视图,你不必设置任何上下文,也不必担心 _behavior 私有变量

作为

var mixin = {
    behaviorMethodWhichYouWantToCallFromView: function(){
           alert("mixin method");
    }
}

var behavior = mn.behavior.extend(_.extend(mixin, {
    //actual behavior code remove the method as behavior will get it from mixin
}))

var view = mn.view.extend(_.extend(mixin, {
    //actual view code remove the method as behavior will get it from mixin
}))

希望对您有所帮助。 我知道这个方法有点长。