我正在使用breeze + knockout作为基本hottowel模板。 使用此模板,我可以进行一些绑定:
<select data-bind="options: $parent.rolesList, value: role">
在rolelist中,它是一个ko.observableArray()和角色,它是一个字符串属性。这个例子一切都很好。
当我尝试进行更复杂的数据绑定时,我的问题就开始了,即:
select data-bind="options: mycollection, optionsText: 'dictionary().name()'"></select>
在这个新例子中,mycollection是ko.observableArray()和dictionary()。name()它是“对象属性”加上一个字符串属性。 如果我去chrome debuger,我可以看到mycollection()[0] .dictionary()。name()有一个值。
所以我不知道我做错了什么。 这里有一个简短的例子(你可以看到我只使用了dictionary.name)http://jsfiddle.net/rolandomartinezg/BN2ZP/2/
答案 0 :(得分: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()
。