有没有一种方法可以表示路由关闭操作而不是将它们全部写在组件 shim 中?

Is there a way to represent route closure actions instead of writing them all in the component shim?

我正在使用 ember-route-action-helper

我有一个如下所示的组件 shim:

{{component-name model=model 
action1=(route-action "action1") 
action2=(route-action "action2") 
action3=(route-action "action3") 
action4=(route-action "action4") 
action5=(route-action "action5") 
action6=(route-action "action6") 
action7=(route-action "action7") 
action8=(route-action "action8")
action9=(route-action "action9") 
action10=(route-action "action10")
action11=(route-action "action11")
action12=(route-action "action12") 
action13=(route-action "action13") 
action14=(route-action "action14")
}}

P.S。以上动作未使用真实动作名称

有很多动作需要冒泡到路线,我没有在我的 ember 应用程序中使用控制器。

由于动作太多,这看起来有点笨拙。 有没有办法以另一种格式表示相同的信息,或者将其写入我的组件 .hbs 文件或 .js 文件中的其他地方?

我认为有一个捷径,您可以尝试直接从组件调用 route-action,而不是一路向下传递。

<button {{action (route-action 'appRouteAction') }}>My-Component button</button>

检查这个ember-twiddle 我不确定,这是正确的做法吗?

你的问题相当于问,"why does this function look so clunky?":

function(model, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) {
    ....
}

答案是:您需要以不同方式分解代码。具有 15 个参数的函数从来都不是一个好主意,出于完全相同的原因,组件也是如此。

有几种方法可以更清楚地分解此代码。也许其中一些操作可以改为在专用服务上进行。也许它们中的一些可以被分组为中间表示(比如一个模型,它有自己的动作)。可能如果你没有通过创建一个什么都不做的 "shim" 添加不必要的模板层,你可以直接将这些操作中的每一个传递到相关的子组件中,这会将它们分散到整个逻辑位置模板。

没有看到你的更多细节,我无法判断这里的适当策略是什么。

您仅将操作(函数)UP传递给路由以进行数据操作,因为它是数据所有者。

其他非数据相关的操作不应传递给路由。

可能的解决方案,

  1. 将所有应用程序共享状态(与数据无关)放入service并将其注入组件
  2. 在组件内部调用模型(传入组件的数据)方法,而不是让路由完成工作