Javascript 如何为给定的情况定义淘汰数据模型?

Javascript 如何为给定的情况定义淘汰数据模型?,javascript,knockout.js,Javascript,Knockout.js,我的数据模型如下所示 Module Fields (ObservableArray) Actions(ObservableArray) Fields (?) name (dyanmic from field list) type (dynamic from field list) selected (entered by user in UI) 模块是主要对象。字段和操作是可观察的数组。每个

我的数据模型如下所示

Module
    Fields (ObservableArray)
    Actions(ObservableArray)
        Fields (?)
            name (dyanmic from field list)
            type (dynamic from field list)
            selected (entered by user in UI)
模块是主要对象。字段和操作是可观察的数组。每个操作下的字段列表需要有更新的字段列表,并且还将有一个从UI捕获的附加属性

应如何填充动作模型下的字段?每个操作下的字段列表对所选字段具有唯一值


我是否需要订阅字段ObservableArray并手动操作每个操作下的字段列表,或者是否有其他更好的方法来执行此操作?

我就是这样处理这种情况的

Javascript

var childObject = function(data){
  var self = this;

  //No special mapping needed here, the mapping plugin does it for us
  ko.mapping.fromJS(data, {}, self);

  this.Select = function(){
    self.selected(!self.selected());
  };
};



var parentObject = function(data){
  var self = this;

  //Map the object to myself, using the mapping object we made earlier
  ko.mapping.fromJS(data, {}, self);

  //Remap the actions column to observable's
  this.Actions = ko.observableArray(_.map(self.Actions(), function(item){
    return new childObject(item);
  }));

};

var myViewModel = function(){
  var self = this;

  this.RootObject = ko.observable();

  var objectData = {
    "Fields": [1, 2, 3, 4],
    "Actions": [
      {
        "name": "David",
        "type": "string",
        "selected": false
      },
      {
        "name": "Nish",
        "type": "string",
        "selected": true
      }]
  };

  this.Init = function(){
    //Pass the object data to the parent object.
    self.RootObject(new parentObject(objectData))
  };
};

$(function(){
  myApp = new myViewModel();
  myApp.Init();

  ko.applyBindings(myApp);
})
Html


名称
类型
挑选出来的

为什么要复制
字段
?你不能把所有的东西都放在同一个地方吗?在那里我可以显示动作中包含的所有字段。UI中的用户将选择他/她是否需要用于操作的字段。添加任何新字段时,正在运行的列表都应该更改
     <div data-bind="with: RootObject">
        <table>
        <thead>
          <tr>
            <th>Name</th>
            <th>Type</th>
            <th>Selected</th>
          </tr>
        </thead>
          <tbody data-bind="foreach: Actions">
            <tr data-bind="click: Select">
              <td data-bind="text: name"></td>
              <td data-bind="text: type"></td>
              <td data-bind="text: selected"></td>
            </tr>
          </tbody>
        </table>
    </div>