Knockout.js 如何不在Durandal小部件绑定上重复显式设置

Knockout.js 如何不在Durandal小部件绑定上重复显式设置,knockout.js,durandal,Knockout.js,Durandal,我正在用Durandal模拟一个网站,以保持我的淘汰赛js整洁,但无可否认,在Durandal方面,我是一个初学者 我经常需要迭代viewModel和bind小部件中的项目数组,但我发现我必须显式地重复“设置”绑定 例如: <section data-bind="foreach: secondaryKpis" class="row"> <div data-bind="widget: { kind: 'kpiSecondary', name

我正在用Durandal模拟一个网站,以保持我的淘汰赛js整洁,但无可否认,在Durandal方面,我是一个初学者

我经常需要迭代viewModel和bind小部件中的项目数组,但我发现我必须显式地重复“设置”绑定

例如:

<section data-bind="foreach: secondaryKpis" class="row">
    <div data-bind="widget: {
        kind: 'kpiSecondary',
        name: $data.name,
        columns: $data.columns,
        delta: $data.delta,
        description: $data.description,
        vsDelta: $data.vsDelta,
        vsDescription: $data.vsDescription
    }">
    </div>
</section>

但这需要我将数据变量展开为
this.settings
,在自定义小部件中,这是正确的方法还是有一种干净的标准方法来实现这一点,我还没有遇到过?

要使您的代码更易于支持,请将
getOptionsFor
方法添加到您的viewmodel中:

getOptionsFor: function (item) {
  return {
    name: item.name,
    descr: item.descr
    //etc
  }
}
在本例中,您的html将如下所示:

<div data-bind="foreach: { data: targetArray, as: 'item' }">
  <div data-bind="widget: $parent.getOptionsFor(item)"></div>
</div>

<div data-bind="foreach: { data: targetArray, as: 'item' }">
  <div data-bind="widget: $parent.getOptionsFor(item)"></div>
</div>