0

我正在使用微风 + 淘汰赛作为基础热毛巾模板。使用此模板,我可以进行一些绑定,例如:

 <select data-bind="options: $parent.rolesList, value: role">

其中 rolelist 是一个 ko.observableArray() ,而 role 是一个字符串属性。这个例子一切都很好。

当我尝试进行一些更复杂的数据绑定时,我的问题就开始了,即:

select data-bind="options: mycollection, optionsText: 'dictionary().name()'"></select>

在这个新示例 mycollection 中,它是 ko.observableArray() 和 dictionary().name(),它是“对象属性”加上一个字符串属性。如果我去 chrome 调试器,我可以看到 mycollection()[0].dictionary().name() 有一个值。

所以我不知道我做错了什么。这是一个简短的例子(你可以看到我只使用 dictionary.name)http://jsfiddle.net/rolandomartinezg/BN2ZP/2/

4

1 回答 1

1

将字符串传递给 时optionsText,Knockout 只是尝试键入您的对象。它不处理嵌套键或将字符串作为 JavaScript 运行。

但是,您可以选择传递一个函数,optionsText该函数将项目作为第一个参数,并且您可以返回您喜欢的任何值。

例如,在您的 jsFiddle 中,您可以定义如下函数:

self.getOptionText = function(item) {
   return item.dictionary.name;   
};

然后,像这样绑定它:

<select data-bind="options: myCollection, optionsText: getOptionText"></select>

item.dictionary().name()在您的问题样本中,如果您正在处理可观察数据,那么您就可以这样做。

于 2013-06-14T21:59:42.560 回答