【发布时间】:2014-03-12 08:14:17
【问题描述】:
我正在开展一个项目,在该项目中,我的模型字段(名称和数量)要到运行时才能知道,并且应该在检索数据后动态添加。我正在尝试创建一个通用视图模型,其中字段将添加到视图模型并进行水合,因此下游工作的开发人员可以在视图中工作。
例如,我的数据可能如下所示:
// Retrieved data
{
"partner_category_str": [
"Financials",
"HCM",
"Payroll",
"Technology"
],
"partner_program_str": [
"Certified Solution Partner",
"Cloud Connect Partner",
"Connect Partner",
"Solution Partner"
]
}
我的准通用视图模型使用检索到的数据中的属性填充自身:
function Facet (data) {
this.name = ko.observable(data);
};
function SearchViewModel () {
var self = this;
$.getJSON("/partners_api/?requestType=facets&partnerType=Software+Partner", function (facets) {
var facet = null,
facetData = null;
for (facet in facets) {
facetData = ko.utils.arrayMap(facets[facet], function(facetItem) { return new Facet (facetItem);});
self[facet] = ko.observableArray(facetData);
}
});
};
ko.applyBindings(new SearchViewModel());
我希望 Web 开发人员能够在他们的视图中使用 viewModel 数据(他们在创建视图时会知道字段名称),如下所示:
<!-- View -->
<!-- Note: the bound field name comes directly from the retrieved data -->
<select id="partner_category_str" data-bind="foreach: partner_category_str">
<option data-bind="text: name, value: name"></option>
</select>
在这些动态创建的字段上,数据并未绑定到视图,但使用data-bind="text: ko.toJSON($root, null, 2)" 查看数据显示属性已在视图模型上设置。看来我的数据在某处的翻译中丢失了,但我不确定在哪里。有什么想法吗?
【问题讨论】: