2017-08-23 16 views
0

ノックアウトjsを使用して複数のフィールドにデータをバインドする際に問題があります。 私はこのコードが原因であることを知りました。このコードは私によって書かれたものではないので、その背後にある理由を理解できませんでした。 誰もこれを説明できますか?このコードはHTMLコードを呼びかけisolatedOptionsを結合するカスタム作成されノックアウトJSのフィールド落下JS

<select data-bind="isolatedOptions: $root.procurementTypes, optionsText: 'Display', optionsValue: 'ItemValue', optionsCaption: 'Select...', value: $data.PROCURE_TY, visible:$root.s1display([6,1])() === 2 && $root.workflowStepDescription().statusCode !== 'NIP'"></select> 

答えて

1

クリック、変更、バインディングに建てられた値のデフォルトのように使用する:

ko.bindingHandlers.isolatedOptions = { 
//element, valueAccessor, allBindings, viewModel, bindingContext 
init: function (element, valueAccessor) { 
    var args = arguments; 
    ko.computed({ 
     read: function() { 
      ko.utils.unwrapObservable(valueAccessor()); 
      ko.bindingHandlers.options.update.apply(this, args); 
     }, 
     owner: this, 
     disposeWhenNodeIsRemoved: element 
    }); 
}, 
update: function (element, valueAccessor) 
{ 
    var args = arguments; 
    ko.computed({ 
     read: function() 
     { 
      ko.utils.unwrapObservable(valueAccessor()); 
      ko.bindingHandlers.options.update.apply(this, args); 
     }, 
     owner: this, 
     disposeWhenNodeIsRemoved: element 
    }); 
}}; 

これは、使用される方法です。 HTML要素のデータバインド属性を使用してコード内で使用する必要があります。もっとここに

http://knockoutjs.com/documentation/custom-bindings.html

あなたの要素

チェックは選択であり、あなたのvalueAccessorはroot.procurementTypes $です。 initは、要素選択の初期状態が設定されているときに呼び出されます。パラメータを受け取り、init関数を実行します。 observablesや計算されたものを使用していて変更がある場合、updateはknockout jsによって複数回呼び出すことができます。これは、バインディングの適用時にも当初呼び出されます。

+0

私はMaterialTypeフィールドがAJAX からフォームのロード時に読み込ま取得されていない問題に直面しています[リンク] http://jsfiddle.net/n0mrjzf4/ MaterialTypesは、Ajaxと設定データから設定されているフィドルでMaterialTypeプレースホルダに値を設定する必要があります。 –

+0

基本的に、ノックアウトのプロパティにデータをバインドするのと同じくらい良いです。それは1つ以上のフィールドですか?私は別の質問を提起し、そこに同じコードを共有することを提案します。根本的な原因を簡単に特定するのに役立ちます。 – Amit

関連する問題