3

計算されたオブザーバブルを使用して、カスタムdiv ID(例:branch3)を作成しようとしています。ただし、計算されたものをバインドしようとすると、「バインディングを解析できません」というエラーが発生します。これを別の方法で実行できると確信していますが、ここで計算を使用できない理由がわかりません。私はそれが行われたのを見たことがあると確信しています。

これが私が取り組んできたjsfiddleです。

フィドル

var branchList   =[{"Id":1,"Latitude":40.2444400000,"Longitude":-111.6608300000,"StreetAddress":"1525 W 820 N","BranchName":"GPS","City":"Cityplacwe","State":"UT","Zip":"84601"},{"Id":2,"Latitude":40.2455550000,"Longitude":-111.6616100000,"StreetAddress":"123 N Center","BranchName":"GPS Branch 2","City":"Lehi","State":"UT","Zip":"84043"}];

//myMarkers = new Array();

var Branch = function (data) {
  var self = this;
  self.Id = ko.observable(data.Id);
  self.Latitude = ko.observable(data.Latitude);
  self.Longitude = ko.observable(data.Id);
  self.BranchName = ko.observable(data.BranchName);
  self.StreetAddress = ko.observable(data.StreetAddress);
  self.City = ko.observable(data.City);
  self.State = ko.observable(data.State);
  self.Zip = ko.observable(data.Zip);
  this.DivId = ko.computed(function () {
    return self.Id();
  });
  //self.DivId = ko.computed({
  //  //Reading from object to field
  //  read: function () {
  //    return "branch" + self.Id();
  //  },
  //  //writing from field to object
  //  write: function (value) {

  //  }
//});

}

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

  //create knockout array
  self.branchArrayKO = ko.observableArray(branchList);
}

そしてHTML

<div data-bind="foreach: branchArrayKO">


<div data-bind="attr: {'id': DivId}">
  <p></p>
  <h2></h2>
  <ul>
    <li data-bind="text: Id"></li>
    <li data-bind="text: BranchName"></li>
    <li data-bind="text: StreetAddress"></li>
  </ul>
</div>

</div>
4

1 に答える 1

2

生の JavaScript 配列をBranches の配列に変換する必要があります。これを行う 1 つの方法はko.utils.arrayMap、リスト内の各項目を反復処理して新しい を作成するために使用することBranchです。

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

    //create knockout array
    self.branchArrayKO = ko.observableArray(ko.utils.arrayMap(branchList, function(branch) {
        return new Branch(branch);
    }));
}

更新された例: http://jsfiddle.net/hawMW/2/

便利なもう 1 つの代替手段は、マッピング プロセスのすべてまたは一部を自動化するために使用できるノックアウト マッピング プラグインです。

于 2012-12-23T22:04:43.290 に答える