1

私は Breeze を使用しています。これは、さまざまなレベルの依存オブザーバブルで構成されるネストされた Observablearray 構造を自動的に作成します。

このフィドルの構造をエミュレートしようとしました。簡単に言えば、Breeze が監視可能な配列に自動的にマッピングする関連ユーザー エンティティと共に、サーバーからクライアント エンティティが返されます。この配列からフォームにいくつかのクライアント プロパティといくつかのユーザー プロパティを表示する必要があるだけです。

HTML

<div>

    <select  data-bind="options: clientAndStaff, optionsText: 'clientId', value: 'clientId', optionsCaption: 'Select a client'"></select>    

</div>

VM

var esp= esp||{};

esp.ClientDetails  = function(x){

    this.clientId =  new ko.dependentObservable(function(){return x.clientId;});

   this.User =  new ko.dependentObservable(function(){return x.ClientStaffDetails;});


};


esp.ClientStaffDetails = function(x){

    var FirstName = new ko.dependentObservable(function(){return x.firstName;});
    var LastName =  new ko.dependentObservable(function(){return x.lastName;});


};

esp.vm = new (function()
              {
                  this.clientAndStaff= ko.observableArray(
                  [
                      new esp.ClientDetails({clientId:1                                        
                                             ,clientStaff:new esp.ClientStaffDetails({firstName:'first',lastName:'example'})

                                            }),
                      new esp.ClientDetails({clientId:2
                                             ,clientStaff:new esp.ClientStaffDetails({firstName:'second',lastName:'example'})
                                            })   

                  ]
                  );
              });

ko.applyBindings(esp.vm);

フィドル

http://jsfiddle.net/T6Fk5/7/

optionsText を firstName にバインドする方法、または observableArray 構造を指定して firstName + LastName にバインドする方法を教えてください。前もって感謝します

4

2 に答える 2

0

これを行う最も簡単な方法は、clientStaffDetails クラスの toString メソッドをオーバーライドすることです。

esp.ClientStaffDetails = function (x) {
    var self = this;

    self.FirstName = new ko.observable(x.firstName);
    self.LastName = new ko.observable(x.lastName);
    self.toString = ko.computed(function () {
        return self.FirstName() + ' ' + self.LastName();
    });

};

optionsText パラメータも User に変更しました

<div>
    <select data-bind="options: clientAndStaff, optionsText: 'User', value: 'clientId', optionsCaption: 'Select a client'"></select>
</div>

フィドルを見る

お役に立てば幸いです。

于 2013-05-24T11:14:51.043 に答える
0

私ができる唯一の方法は、そよ風によって返されたデータを改造し、それを監視可能な配列に追加することです。これにはあまり満足していませんが、読み取り専用データであるため、これは今のところ機能します。

function querySucceeded(data) {
            if (observableArray!= null) {
                var temp = [];
                data.results.forEach(function (val) {
                    temp.push({'id':val.ClientStaffID(),'name':val.User().FirstName() +' '+val.User().LastName() });

                });
                observableArray(temp);
                firstLoad = false;
                return;
            }

        }
于 2013-05-27T08:57:34.293 に答える