有没有一种方法可以表示路由关闭操作而不是将它们全部写在组件 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传递给路由以进行数据操作,因为它是数据所有者。
其他非数据相关的操作不应传递给路由。
可能的解决方案,
- 将所有应用程序共享状态(与数据无关)放入
service
并将其注入组件
- 在组件内部调用模型(传入组件的数据)方法,而不是让路由完成工作
我正在使用 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传递给路由以进行数据操作,因为它是数据所有者。
其他非数据相关的操作不应传递给路由。
可能的解决方案,
- 将所有应用程序共享状态(与数据无关)放入
service
并将其注入组件 - 在组件内部调用模型(传入组件的数据)方法,而不是让路由完成工作