2011-10-21 2 views
0

값 목록에 knockout data-bind 옵션을 사용하여 "Select"를 채우고 기본값 중 하나를 "selected"로 설정하려고합니다.knockout observable array 선택된 값 설정

두 서버 요청,

  1. 값 (dataRepository.GetLifelines)의 목록을 가져 목록에서 선택으로
  2. 이 값 중 하나를 설정이 있습니다. (dataRepository.GetMockSelectedLifeline)

첫 번째 요구 사항이 해결되었습니다. 선택에 대한 데이터 바인딩이 "선택된"값으로 잘 작동합니다.

목록의 기본값 "Selected Value"를 설정하는 데 문제가 있습니다. 누군가 나를 도울 수 있습니까? 방법은 this.selectValue입니다. 선택한 라이프 라인을 일치하는 "이름"으로 설정하려고합니다.

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