1

我正在使用 Breeze,它会自动创建一个嵌套的 Observablearray 结构,该结构由不同级别的依赖 observables 组成。

我试图模仿这个小提琴中的结构。简单地说,我有一个客户端实体从服务器返回,并带有一个相关的用户实体,Breeze 会自动映射到一个可观察的数组。我只需要从这个数组中在我的表单上显示一些客户端属性和一些用户属性。

HTML

<div>

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

</div>

虚拟机

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 或者更好的是 firstName + LastName 给定 observableArray 结构。提前致谢

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 回答