2011-10-21 106 views
0

我想填充「選擇」使用淘汰賽數據綁定選項的值列表,並將其中一個值默認設置爲「選定」。淘汰賽觀察數組設置選定的值

有兩種服務器的請求,

  1. 獲取的值(dataRepository.GetLifelines)名單
  2. 設定值中的一個從列表中選擇。 (dataRepository.GetMockSelectedLifeline)

第一個要求已被解決。數據綁定到選擇工作正常與「選定」值。

我遇到了在列表中設置默認「選定值」的問題。有人可以幫幫我嗎。方法是this.selectValue。它試圖將selectedLifeline設置爲匹配的「名稱」。

function LifelineViewModel() { 
    this.lifelines = ko.observableArray([{}]); 
    this.selectedLifeline = ko.observable(); 

    this.updateData = function (data) { 
     var boundUpdate = bind(function (value) { 
      this.lifelines.push(value); 
     }, this); 

     $.each(data, function (index, item) { 
      boundUpdate(item); 
     }); 
     dataRepository.GetMockSelectedLifeline(bind(this.selectValue, this)); 
    } 

    this.selectValue = function (data) { 
     this.selectedLifeline = ko.utils.arrayFirst(this.lifelines, function (lifeline) { 
      return lifeline.Name === data.Name; 
     }); 
    } 
} 

LifelineViewModel.prototype.Init = function() { 
    var boundUpdateData = bind(this.updateData, this); 
    dataRepository.GetLifelines(boundUpdateData); 
} 

var bind = function (func, thisValue) { 
    return function() { 
     return func.apply(thisValue, arguments); 
    } 
} 

回答

0

由於selectedLifeline是可觀察的,所以您沒有正確設置它的值。

你可以試試這個。相反的:

this.selectValue = function (data) { 
    this.selectedLifeline = ko.utils.arrayFirst(this.lifelines, function (lifeline) { 
     return lifeline.Name === data.Name; 
    }); 
} 

..像...

this.selectValue = function (data) { 
    this.selectedLifeline(ko.utils.arrayFirst(this.lifelines, function (lifeline) { 
     return lifeline.Name === data.Name; 
    })); 
} 
+0

感謝馬克。這解決了問題:)是否有關於ko.utils和ko方法的文檔? –

+2

這是一篇很棒的文章,介紹一些最有用的實用功能...... http://www.knockmeout.net/2011/04/utility-functions-in-knockoutjs.html – bflemi3