我是新来的 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 从两个不同的 SharePoint 列表返回建筑物/位置对象的 observableArray。请注意,对象中的每个属性都定义为 ko.observable()。我所看到的所有内容都显示了基于单个文件的链接,该文件试图使用 AJAX 调用自动填充选择框,因为另一个下拉变量(在本例中为 locationID)已更新。这些功能可以正常工作,因为以下工作(只是没有链接两个下拉菜单):
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>
我认为很简单的事情并没有发生。我感觉很近,只需要一脚。
谢谢!