0
constructor(
      public templateHeaderRow = 'DefaultTableHeaderTemplate',
      public templateBodyRow = 'DefaultTableRowTemplate',
      private templateBase = _templateBase) {

          require([this.templateBase + templateHeaderRow + '.html', this.templateBase+ templateBodyRow + '.html'], () => console.log('fdsfdsdfsf'));
}

然后我这样称呼它:log = new ListViewBase(undefined,'LoggingTableRowTemplate');

似乎有点愚蠢(undefined,'。谁能提出不同的设计?

什么会很好,就像在 C# 中我可以做(parametername:value, another:value2)的那样,并且顺序对于可选参数无关紧要。虽然在打字稿中没有找到类似的东西。

更新

替代我这样做:

public templateHeaderRow = 'DefaultTableHeaderTemplate';
public templateBodyRow = 'DefaultTableRowTemplate';
private templateBase = _templateBase;

constructor(configuration? : ListViewBaseConfiguration) {
    if (typeof configuration !== "undefined") {
        if (typeof configuration.templateBase !== "undefined")
            this.templateBase = configuration.templateBase;
        if (typeof configuration.templateBodyRow !== "undefined")
            this.templateBodyRow = configuration.templateBodyRow;
        if (typeof configuration.templateHeaderRow !== "undefined")
            this.templateHeaderRow = configuration.templateHeaderRow;
    }


    require(['template!' + this.templateBase + this.templateHeaderRow + '.html',
        'template!' + this.templateBase + this.templateBodyRow + '.html']);
}

但是我必须编写更多代码来获得某些参数可以设置而其他参数不能设置的行为。

4

1 回答 1

2

我无法真正添加您在这里已经知道的内容。

如果您在参数上使用默认值,最好的办法是按可能性对它们进行排序,即最有可能被传递的优先。

如果您首先获得默认值,则传递对象可能会稍微不那么繁琐,例如:

var config = MyClass.GetConfig(); // static method call
config.templateBodyRow = 'Not Default';

然后,您可以合理地期望传递给构造函数的对象中的所有值。

另一个选项可能是 JavaScript 的 null-coalesce 等价物:

this.templateBodyRow = config.templateBodyRow || 'DefaultBodyRowTemplate';

它只是比你的版本短。

这只是一个选项 - 在没有命名参数的情况下,您正在选择最好的一组!

于 2013-09-14T18:13:21.140 回答