我可以不使用 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')
来做到这一点,但我不鼓励使用它
自
_behaviors 是 Marionette.View class 的私有变量,它的名称可以更改,也可以在即将发布的版本中删除
您必须为该方法设置上下文,因为 _.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
}))
希望对您有所帮助。
我知道这个方法有点长。
我正在寻找从视图内部调用 Marionette 的 behaviors 中定义的方法的替代方法。
肯定有 eventproxy 但也许直接调用该方法更直观,例如:
view.behaviorsMethod();
我可以分配它:
view.method = behavior.method;
我可以检查 重新分配 因为它可能会给其他人带来意想不到的结果:
view.method = (view.method !== undefined ? view.method : behavior.method);
但这似乎不是一种优雅的方式。
你的问题的答案是你不能直接这样做,但总有办法。
你可以使用 _.invoke(this._behaviors, 'yourMethodName')
来做到这一点,但我不鼓励使用它
自
_behaviors 是 Marionette.View class 的私有变量,它的名称可以更改,也可以在即将发布的版本中删除
您必须为该方法设置上下文,因为 _.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
}))
希望对您有所帮助。 我知道这个方法有点长。