1

ドロップダウンリスト(剣道ドロップダウン)が使用するバインディングを完全なオブジェクトに設定しようとしています。私はノックアウト剣道を使用してバインドを達成していますが、剣道のものやノックアウト剣道のものは私の問題の要因ではないと思います.

たとえば、次のオブジェクトがあります

var model = {
  "Client": null,
  "Clients": [
    {
      "CompanyAccount": {
        "RelationshipManager": {},
        "CompanyAccountId": 1,
        "Name": "My Company Name",
        "PhoneNumber": "(555) 555-5555",
        "Address": {
          "State": {
            "StateId": 6,
            "Name": "New York",
            "Abbreviation": "NY"
          },
          "AddressId": 1,
          "Street1": "123 Any Street",
          "Street2": null,
          "City": "New York",
          "StateId": 6,
          "Zip": 12345
        }
      },
      "ClientId": 1,
      "Name": "New Client 1/30/2013",
      "CompanyAccountId": 1,
      "ContactName": null,
      "Salutation": null,
      "ClientAddress": null,
      "OfficePhoneNumber": null,
      "OfficePhoneExtension": null,
      "MobilePhoneNumber": null,
      "Email": null,
      "TrackingState": 0
    }
  ]
  }
}

ノックアウト マッピング プラグインを使用して、すべてのものをオブザーバブルに変換します。

var viewModel = ko.mapping.fromJS(モデル); ko.applyBindings(viewModel);

私のhtmlバインディングは次のようになります

<select data-bind="kendoDropDownList: { dataTextField: 'Name', optionLabel: 'Select An Client...', dataValueField: 'ClientId', data: Clients, value: Client }"></select>

Clientしかし、次のようなデータでプロパティを設定したい

Client: {
  "CompanyAccount": {
    "RelationshipManager": {},
    "CompanyAccountId": 1,
    "Name": "My Company Name",
    "PhoneNumber": "(555) 555-5555",
    "Address": {
      "State": {
        "StateId": 6,
        "Name": "New York",
        "Abbreviation": "NY"
      },
      "AddressId": 1,
      "Street1": "123 Any Street",
      "Street2": null,
      "City": "New York",
      "StateId": 6,
      "Zip": 12345
    }
  },
  "ClientId": 1,
  "Name": "New Client 1/30/2013",
  "CompanyAccountId": 1,
  "ContactName": null,
  "Salutation": null,
  "ClientAddress": null,
  "OfficePhoneNumber": null,
  "OfficePhoneExtension": null,
  "MobilePhoneNumber": null,
  "Email": null,
  "TrackingState": 0
}

「1」や「New Client 1/30/2013」などのデータを使用してプロパティを設定する方法しかわかりません

*編集 Entity Frameworkの経験が不足しているため、これを設計しようとしています。外部キーと、クライアントに送信されるモデルの外部キーに関連付けられているオブジェクトがある場合。モデルではなく外部キーを更新すると、SaveChanges() を呼び出すときに、モデルで矛盾した状態の例外が発生します。私の最善のアプローチは、これらのオブジェクトなしで(ForeignKey IDのみを含む)ViewModelを作成することだと思います。

4

1 に答える 1

3

この剣道UIウィジェットは、値をオブジェクトとして設定することをサポートしていません。値を一意のキー(ClientId)に設定してから、計算されたオブザーバブルを使用して実際のオブジェクトを取得する必要があります。

次のようなもの:http://jsfiddle.net/rniemeyer/xz2uY/

this.selectedId = ko.observable("2");
this.selectedChoice = ko.computed(function() {
    var id = this.selectedId();
    return ko.utils.arrayFirst(this.choices(), function(choice) {
       return choice.id ===  id;
    });
}, this);
于 2013-01-31T05:31:47.633 に答える