0

これがバグかどうかはわかりませんが、1.2.1が機能する場合、knockout.js2.1はこのサンプルでは機能しません。 http://jsfiddle.net/gurkavcu/kKNtv/

2.1を使用するように外部リソースを更新すると、動作が停止します:http: //cloud.github.com/downloads/SteveSanderson/knockout/knockout-2.1.0.js

dataList = [ {name:'length1',id:1},
             {name:'length2',id:2},
             {name:'length3',id:3},
             {name:'length4',id:4},
             {name:'length5',id:5} ]


var editOfferViewModel = { 
    selectedLength: ko.observable(),
    multiSelectedLength: ko.observableArray()    
}; 

ko.applyBindings(editOfferViewModel); 

$(document).ready(function() {
    editOfferViewModel.selectedLength(2);
    editOfferViewModel.multiSelectedLength(['2','3']);
});
4

1 に答える 1

1

整数であるid値にバインドされていますが、文字列を指定しています。おそらく、この動作はノックアウト1と2の間で変更されました。選択した値を整数に設定するか、idプロパティ文字列を作成すると機能します。選択したすべてのアイテムのJSONを表示する簡単な例を次に示します。文字列が含まれていて、選択ボックスに何も表示されていないことがわかります。アイテムを選択すると、整数として表示されます(fiddle)。これらの2つの変更のいずれかが機能します。

dataList = [ {name:'length1',id:1},{name:'length2',id:2},{name:'length3',id:3},{name:'length4',id:4},{name:'length5',id:5} ]
// dataList = [ {name:'length1',id:'1'},{name:'length2',id:'2'},{name:'length3',id:'3'},{name:'length4',id:'4'},{name:'length5',id:'5'} ] // this would work
...
editOfferViewModel.multiSelectedLength(['2','3']);
// editOfferViewModel.multiSelectedLength([2,3]); // this works

私の質問は、なぜこれがまったく機能するのかということです...

  1. dataListはビューモデルの一部ではありませんが、koはすべてのウィンドウプロパティでバインディングも検索しますか?私はそれを知りませんでしたが、ウィンドウオブジェクトから「innerWidth」が表示されていることがわかります
  2. [selectedOptions]バインディングは、実際のjavascriptオブジェクトにバインドすることになっていますが、使用するoptionsValueパラメーターを指定すると推測されます。それは彼らのドキュメントではうまく説明されていません。これのサポートが文字列/整数の不一致の動作を壊したものだと思います。
于 2012-05-28T07:37:12.177 に答える