使用knockout绑定选择的html控件

时间:2013-06-14 21:42:57

标签: javascript knockout.js breeze hottowel

我正在使用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/

1 个答案:

答案 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()