【问题标题】:Dynamic template arguments for an Ember componentEmber 组件的动态模板参数
【发布时间】:2021-02-17 23:00:53
【问题描述】:

我遇到了一个使用 glimmer 组件的情况,该组件在其中呈现 LinkTo 组件。问题是LinkTo@model={{undefined}} 的情况和省略@model 参数的情况视为两种不同的情况。这是因为它的默认值为special value of UNDEFINED。发生这种情况时,组件使用 JS 进行转换,即 href 是 #,因此您不能使用 在新选项卡中打开 之类的浏览器命令来打开生成的链接。所以我尝试使用内联ifs

    <LinkTo @route={{@route}}
    {{if @model (concat "@model={{" @model "}}")}}
    {{if @query (concat "@query={{" @query "}}")}}
    >
    {{yield}}
    </LinkTo>

但是,正如我预期的那样,这不起作用。我不得不求助于多个 if 块,如下所示:

    {{#if @model}}
      <LinkTo @route={{@route}} @model={{@model}} @query={{@query}} @replace={{@replace}}>
        {{yield}}
      </LinkTo>
    {{else if @models}}
      <LinkTo @route={{@route}} @models={{@models}} @query={{@query}} @replace={{@replace}}>
        {{yield}}
      </LinkTo>
    {{else}}
      <LinkTo @route={{@route}} @query={{@query}} @replace={{@replace}}>
        {{yield}}
      </LinkTo>
    {{/if}}

这可行,但相当冗长并且需要大量重复。有没有办法只在指定给父组件时动态传递@model

【问题讨论】:

    标签: javascript ember.js glimmer.js


    【解决方案1】:

    我认为你应该做的是永远依赖@models

    你可以这样做:

    <LinkTo @route={{@route}} @models={{this.models}}>{{yield}}</LinkTo>
    

    在js中:

    get models() {
      if(this.args.model) {
        return [this.args.model];
      }
      if(this.args.models) {
        return this.args.models;
      }
      return [];
    }
    

    【讨论】:

    • 这绝对有助于减少我的组件的冗长。谢谢!我仍然想知道是否有办法为组件指定动态参数。
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多