【问题标题】:Binding on select html control using knockout使用敲除绑定选择 html 控件
【发布时间】:2013-06-11 15:31:13
【问题描述】:

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

 <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/

【问题讨论】:

    标签: javascript knockout.js breeze hottowel


    【解决方案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()

    【讨论】:

    • 是的,你说得对!其作品。正如我之前所说,我在微风中工作,在微风中思考。新属性应该是:Item.name = ko.computed(function () { return Item.dictionary().name(); }, this);
    猜你喜欢
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2015-11-28
    • 2013-01-08
    • 2013-08-14
    • 2015-04-12
    相关资源
    最近更新 更多