【发布时间】:2019-01-11 14:16:38
【问题描述】:
正如淘汰赛官方文档所说 (The data-bind syntax),绑定具有 name 和 value:
<span data-bind="name: value"></span>
¿name 部分可以用变量动态设置吗?
eval 在这里不起作用。
背景: 我有一堆属性,可以是常规文本、url、电话号码、isbn 等。我还为其中一些设置了自定义绑定,因此我需要为每个属性应用最适合的绑定...以编程方式.
//viewmodel props
this.url1 = ko.observable(...);
this.text1 = ko.observable(...);
this.isbn1 = ko.observable(...);
...
var metaProps = [
{ name: 'url1', binding: 'url' },
{ name: 'text1', binding: 'text' },
{ name: 'isbn1', binding: 'isbn' },
...
]
这里的关键是我的视图模型的道具取决于模型对象的特定子类型,所以我不想为每个子类型(太多)实现自定义 HTML 模板。现在我的模板看起来像:
//HTML
<div data-bind='foreach: { data: metaProps }'>
<!-- ko if: binding == 'url' -->
<span data-bind="url: $parent[name]">
<!-- /ko -->
<!-- ko if: binding == 'isbn' -->
<span data-bind="isbn: $parent[name]">
<!-- /ko -->
<!-- ko if: binding == 'text' -->
<span data-bind="text: $parent[name]">
<!-- /ko -->
...
</div>
我的目标是将 html 简化为:
<div data-bind='foreach: { data: metaProps }'>
<span data-bind="binding: $parent[name]">
</div>
【问题讨论】:
标签: knockout.js