0

目標:賦予用戶調整映射結果的能力。敲除交叉類數據綁定

我遇到了一個問題,我需要實際更改使用數據綁定元素的實例。免責聲明:我的json數據結構可能已關閉,我可以對其進行修改。我正在編寫一個表頭映射應用程序,以便用戶可以驗證服務器映射的標題是否正確。如果出現問題,用戶將能夠映射標題。當選擇菜單改變時,我無法弄清楚如何實際更新綁定到結果的數據。感覺它應該是非常容易的。我一直髮現自己有基本完成的淘汰賽應用少最後一步......

標記段:

<div id="wrapper" data-bind="foreach: headings"> 
    <h1>Bind from this</h1> 
    <select data-bind="value: selectMenuIdVal, event: { change: updateListing }"> 
    <option> </option> 
     <!-- ko foreach: $root.headings --> 
     <option data-bind="value: $data.CC_FIELD_ID, visible: $data.VENDOR_FIELD_NAME(), text: $data.VENDOR_FIELD_NAME"></option> 
     <!-- /ko --> 
    </select> 
    <h1>To this</h1> 
    <ul data-bind="foreach: listingFields"> 
     <li data-bind="text: $data.VALUE"></li> 
    </ul> 
</div> 

KO段:

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

    var heading = ko.mapping.fromJS(data, {}, this); 
     heading.selectMenuIdVal = ko.observable(heading.CC_FIELD_ID()); 
     // heading.listingFields gets mapped by the mapping plugin 

    this.updateListing = function(ko_evt, js_evt) { 
        //TODO 
      // Get the listing results from the value of the select menu 

      // self.listingFields(those listings); 
    } 

    return heading; 
} 

這裏是我的小提琴:http://jsfiddle.net/breck421/SLT9B/1/

回答

1

我真的不確定是否承諾你是對的。

請讓我知道,如果這是你在找什麼:

this.updateListing = function (ko_evt, js_evt) { 
    console.log("fired"); 
    //Do something freaking awesome!!!!!!! 
    if (vm.dataRepo) { 
     for (var i = 0; i < vm.dataRepo.HEADINGS.length; i++) { 
      if (vm.dataRepo.HEADINGS[i].CC_FIELD_ID == heading.selectMenuIdVal()) { 


       var listingFields = []; 

       for (var j = 0; j < vm.dataRepo.LISTINGS.length; j++) { 
        var listing = vm.dataRepo.LISTINGS[j]; 
        var field = listing[i]; 

        if (field) { 
         listingFields.push(field); 
        } 
       } 
       heading.listingFields(listingFields); 

       //   heading.listingFields = listingFields; 
      } 
     } 
    } 
} 

See fiddle

我希望它能幫助。

+0

謝謝達米安。這非常有幫助。 –