1

我在ViewModel中有3个observableArrays;自定义组件的构造函数中的参数总是未定义

groupedCustomFields: ko.ObservableArray<any> = ko.observableArray([]); 
customFieldsForAdvSearch: ko.ObservableArray<any> = ko.observableArray([]); 
countries: ko.ObservableArray<Country> = ko.observableArray([]); 

在视图模型的构造我初始化他们的数据来自一些API请求

constructor() { 
//some other operations 

this.loadCustomFields(); 
this.loadCountries(); 
} 

private loadCustomFieldsForAdvSearch() { 
    dataService.Management.getCustomFields() 
     .done(response => { 
      this.groupedCustomFields(sortBy(new CustomFieldsService().getGroupedFields(response.collection), i => i.displayOrder)); 
      this.customFieldsForAdvSearch(response.collection 
       .filter(l => defaultFields.indexOf(l.name) === -1) 
       .map(l => { 
        return { 
         fieldName: l.name, 
         displayName: l.display, 
         displayOrder: l.order, 
         value: '' 
        }; 
       }) 
       .sort((x, y) => x.displayOrder - y.displayOrder)); 
     }); 
} 

private loadCountries() { 
    dataService.Management.getCountriesWithStates() 
     .done(countries => { 
      this.countries(countries); 
     }); 
} 

这observableArrays我传递给我的自定义组件:

<component1 params="{ 
    customFields: customFieldsForAdvSearch, 
    groupedCustomFields: groupedCustomFields, 
    countries: countries 
    }"> 
</component1> 

问题:在component1groupedCustomFields构造即使customFieldscountries没有问题,也总是未定义。

constructor(params: any) { 
    this.customFields = params.customFields; 
    this.groupedCustomFields = params.groupedCustomFields;//undefined 
    this.countries = params.countries; 
} 

为什么会发生这种情况?我该如何解决它?

+0

看着代码和标签,我们可以假设这是关于淘汰赛权的问题? –

+0

@ R.DarioDuarte,是的,我已经添加了标签:)或更好地添加它的问题? – demo

+0

嗨@demo我刚刚看到你的组件1调用中缺少一个逗号,紧跟在customFields之后,我刚刚编辑了你的问题,但它可能与你未定义的问题有关,请检查是否添加该逗号有助于 –

回答

1

这是你的代码:

<component1 params="{ 
    customFields: customFieldsForAdvSearch 
    groupedCustomFields: groupedCustomFields, 
    countries: countries 
    }"> 
</component1> 

你有你的组件调用缺少逗号,只需添加它,它应该工作,这是当你在你的ViewModel

接收不确定参数的共同课题
<component1 params="{ 
    customFields: customFieldsForAdvSearch, 
    groupedCustomFields: groupedCustomFields, 
    countries: countries 
    }"> 
</component1>