2011-10-21 14 views
0

ノックアウトデータバインドオプションを使用して値のリストを作成し、その値の1つをデフォルトで「選択済み」に設定しようとしています。リストから選択してノックアウト可観測配列選択値の設定

2つのサーバー要求が

  1. は値(dataRepository.GetLifelines)のリストを取得し、あります
  2. は、値のいずれかを設定します。 (dataRepository.GetMockSelectedLifeline)

最初の要件が処理されました。選択項目へのデータバインドは「選択済み」値で正常に機能しています。

のデフォルトの「選択した値」を設定する際に問題が発生しています。誰かが私を助けてくれますか?メソッドは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