Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 淘汰js-订阅未更新<;选择>;选择权_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 淘汰js-订阅未更新<;选择>;选择权

Javascript 淘汰js-订阅未更新<;选择>;选择权,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我用的是击倒JS。我有两个。一个具有区域,另一个具有选定区域内的城镇。当用户选择一个区域时,“城镇选择”将与该区域的城镇一起更新。然而在我的网站上却没有。为什么呢?这是我的密码: interface iGetAreas { _areasList: Array<string>; _areas: KnockoutObservableArray<string>; _selectedArea: KnockoutObservable&

我用的是击倒JS。我有两个
。一个具有区域,另一个具有选定区域内的城镇。当用户选择一个区域时,“城镇选择”将与该区域的城镇一起更新。然而在我的网站上却没有。为什么呢?这是我的密码:

interface iGetAreas {
        _areasList: Array<string>;
        _areas: KnockoutObservableArray<string>;
        _selectedArea: KnockoutObservable<string>;
        getAreas(geonameId: string);
    }

    class AreaGetter implements iGetAreas {
        _areasList = [];
        _areas = ko.observableArray([]);
        _selectedArea = ko.observable('');


        getAreas = (geonameId) => {
            this._areasList = [];
            $.ajax({
                url: `http://api.geonames.org/children?geonameId=${geonameId}&username=elion`
            }).then((allAreasXML) => {
                var allAreasJSON = xml2json(allAreasXML);
                var allAreas = JSON.parse(allAreasJSON);
                if(allAreas.geonames.length) {
                    for (var index = 1; index < allAreas.geonames.length - 1; index++) {
                    this._areasList.push(allAreas.geonames[index].geoname);
                    }
                } else {
                    if(allAreas.geonames) {
                        this._areasList.push(allAreas.geonames.geoname);
                    }
                }
                this._areas(this._areasList);
                $('.tvr-select').each(function() {
                    $(this).multiselect({
                        buttonWidth: '100%',
                        buttonContainer: '<div style="height: 64px;" />',
                        buttonClass: 'none'
                    });
                })
            });
        }
    }

class SearchFilterViewModel {
    _regionGetter: AreaGetter;
    _townGetter: AreaGetter;
    _categories: KnockoutObservableArray<Category>;
    _categoryID:number;

    constructor() {
        this._categoryID = 1;
        this._categories = ko.observableArray([
            new Category("Vegan Meat", 1), 
            new Category("Vegan Dairy", 2), 
            new Category("Confectionary", 3),
            new Category("Baking", 4),
            new Category("Restaurants", 5),
            new Category("Fashion", 6)
        ]);
        this._regionGetter = new AreaGetter();
        this._townGetter = new AreaGetter();
        this._regionGetter.getAreas("2186224");
        this._regionGetter._selectedArea.subscribe(this._townGetter.getAreas.bind(this._townGetter));
    }

    logMyStuff = function() {
        console.log(this._townGetter._areasList);
        console.log(this._regionGetter._areasList);
        console.log("stuff");
    }
}

$(document).ready(function() {
    var _searchFilterViewModel: SearchFilterViewModel = new SearchFilterViewModel();
    var _searchFilterForm = $("#find-vegan-products-page").find("form")[0];
    ko.applyBindings(_searchFilterViewModel, _searchFilterForm);
});
接口iGetAreas{
_区域列表:数组;
_区域:击倒台;
_选择区域:可观察到的敲除;
getAreas(geonameId:string);
}
类AreaGetter实现iGetAreas{
_区域列表=[];
_面积=ko.可观察到的面积([]);
_选定区域=可观察到的ko(“”);
getAreas=(geonameId)=>{
此区域列表=[];
$.ajax({
网址:`http://api.geonames.org/children?geonameId=${geonameId}&username=elion`
}).然后((allAreasXML)=>{
var allAreasJSON=xml2json(allAreasXML);
var allAreas=JSON.parse(allAreasJSON);
if(Allreas.geonames.length){
对于(var index=1;index
HTML:


过滤你的搜索
去
选择由php模板完成,但以下是输出:

    <select class="tvr-select" data-bind="options: _regionGetter._areas,
                optionsText: 'name',
                optionsValue: 'geonameId',
                value: _regionGetter._selectedArea,
                optionsCaption: 'REGION'
                " style="display: none;"><option value="">REGION</option><option value="2193734">Auckland</option><option value="2182560">Bay of Plenty</option><option value="2192628">Canterbury</option><option value="4033013">Chatham Islands</option><option value="2190767">Gisborne</option><option value="2190146">Hawke's Bay</option><option value="2179671">Manawatu-Wanganui</option><option value="2187304">Marlborough</option><option value="6612108">Nelson</option><option value="2185978">Northland</option><option value="6612109">Otago</option><option value="2182501">Southland</option><option value="2181872">Taranaki</option><option value="2181818">Tasman</option><option value="2180293">Waikato</option><option value="2179538">Wellington</option>
            </select>

<select class="tvr-select" data-bind="options: _townGetter._areas,
            optionsText: 'name',
            optionsValue: 'geonameId',
            value: _townGetter._selectedArea,
            optionsCaption: 'TOWN'
            " style="display: none;"><option value="">TOWN</option><option value="2193772">Ashburton District</option><option value="7910036">Christchurch City</option><option value="7910044">Hurunui District</option><option value="7910046">Kaikoura District</option><option value="7910050">Mackenzie District</option><option value="7910060">Selwyn District</option><option value="2181134">Timaru District</option><option value="7910069">Waimakariri District</option>
        </select>
普伦蒂坎特伯里查塔姆群岛的阿克兰湾吉斯伯恩霍克湾北部奥塔戈斯南部塔拉纳基塔斯马纳瓦图-旺加努伊马尔区
TOWNAshburton区Christchurch市Urunui区Kaikoura区Mackenzie区Selwyn区Timaru区Waimakariri区

请注意,我试图运行一个名为
logMyStuff
的函数,但当我单击该按钮时,它从未运行过。我想知道townGetter.\u areas是否充满了区域

我刚从我的问题中注意到,值在town select中。这是select插件的一个显示问题。您需要为multiselect插件定制绑定。可能是这个:
    <select class="tvr-select" data-bind="options: _regionGetter._areas,
                optionsText: 'name',
                optionsValue: 'geonameId',
                value: _regionGetter._selectedArea,
                optionsCaption: 'REGION'
                " style="display: none;"><option value="">REGION</option><option value="2193734">Auckland</option><option value="2182560">Bay of Plenty</option><option value="2192628">Canterbury</option><option value="4033013">Chatham Islands</option><option value="2190767">Gisborne</option><option value="2190146">Hawke's Bay</option><option value="2179671">Manawatu-Wanganui</option><option value="2187304">Marlborough</option><option value="6612108">Nelson</option><option value="2185978">Northland</option><option value="6612109">Otago</option><option value="2182501">Southland</option><option value="2181872">Taranaki</option><option value="2181818">Tasman</option><option value="2180293">Waikato</option><option value="2179538">Wellington</option>
            </select>

<select class="tvr-select" data-bind="options: _townGetter._areas,
            optionsText: 'name',
            optionsValue: 'geonameId',
            value: _townGetter._selectedArea,
            optionsCaption: 'TOWN'
            " style="display: none;"><option value="">TOWN</option><option value="2193772">Ashburton District</option><option value="7910036">Christchurch City</option><option value="7910044">Hurunui District</option><option value="7910046">Kaikoura District</option><option value="7910050">Mackenzie District</option><option value="7910060">Selwyn District</option><option value="2181134">Timaru District</option><option value="7910069">Waimakariri District</option>
        </select>