私は新しい KnockoutJS で、SPServices を使用して SharePoint リストとやり取りしています。カスケード ドロップダウンを作成しようとしていますが、少し行き詰っています。基本的に、場所のリストとその場所にある建物のリストがあります。場所が選択されると、CAML クエリを作成して、建物のドロップダウンに表示されるデータベースを除外します。このサイトで働いている皆さんに本当に感謝しています。過去数か月間、私を大いに助けてくれましたが、この問題について何も見つけられないようです。以下のコードの終了状態は、場所に対して機能するドロップ ダウンですが、一度表示された建物に対しては空のドロップ ダウンです。
Javascript:
var bm = new BuildingModel();
var lm = new LocationModel();
var ViewModel = function(){
var vm = this;
vm.locationID = ko.observable();
vm.buildingID = ko.observable();
vm.locations = lm.getLocationsAsJSON();
vm.buildings = ko.computed(function(){
if(vm.locationID() === undefined){
return bm.getBuildingsAsJSON();
} else {
return bm.getBuildingsAsJSON(vm.locationID().id());
}
});
基本的に、getXXXXAsJSON は、2 つの異なる SharePoint リストから建物/場所オブジェクトの observableArray を返します。オブジェクトの各属性は ko.observable() として定義されていることに注意してください。私が見たものはすべて、他のドロップダウン変数 (この場合は locationID) が更新されたときに、AJAX 呼び出しを使用して選択ボックスを自動入力しようとする単一のファイル バイスに基づく連鎖を示しています。関数は、次のように機能するという点で正常に機能します (2 つのドロップダウンをリンクしないだけです)。
vm.locations = lm.getLocationsAsJSON();
vm.buildings = bm.getBuildingsAsJSON();
HTML:
<select data-bind="options: locations, optionsText: function(location){return location.longName}, value: locationID, optionsCaption:'Choose...'"></select>
<select data-bind="options: buildings, optionsText: 'number', value: buildingID, optionsCaption: 'Choose...'"></select>
私がかなり簡単だと思っていたことが、そうではありませんでした。私はちょうどキックが必要な近くに感じます。
ありがとう!