首页 文章

Knockout绑定到Select optionsText以获取fullName

提问于
浏览
1

问题是关于optionsText绑定以获取fullName .

JsFiddle

当我这样做它工作as in Knockout doc

<select multiple="multiple" width="50" data-bind="options: leftItems,optionsText: function(item) {return item.firstName() + ' ' + item.lastName() }, selectedOptions:leftSelectedItems"></select>

但是当我将函数移动到View Model并尝试使用它时不起作用,

这是我的选择,

<select multiple="multiple" width="50" data-bind="options: leftItems,optionsText: returnFullName(item), selectedOptions:leftSelectedItems"></select>

在我的视图模型中,

self.returnFullName = function(item) {
        console.log("self.returnFullName called.");
        console.log(item);
        return item.firstName() + ' ' + item.lastName();
    };

我得到的错误是“Uncaught ReferenceError:无法处理绑定”选项:function()“这甚至与optionText无关 .

我错过了什么吗?

1 回答

  • 1

    你不需要像你那样传递它 . 但是你可以遵循这些方法中的任何一种 .

    • 方法1

    您可以只调用viewmodel函数,第一个参数将隐式具有$ data参数 .

    <select multiple="multiple" width="150" data-bind="options: names,optionsText: returnFullName"></select>
    

    在VM中

    self.returnFullName = function(item) {
         console.log(item);
            return item.firstName + " " + item.lastName;
    
        };
    

    的jsfiddle: -

    http://jsfiddle.net/mtfv6q6a/10/

    • 方法2

    绑定$ data并像你一样传递它 .

    <select multiple="multiple" width="150" data-bind="options: names,optionsText:returnFullName.bind($data);"></select>
    

    的jsfiddle: -

    http://jsfiddle.net/mtfv6q6a/42/

    • 方法3: -

    你可以将它包装在函数调用中并像这样调用: -

    <select multiple="multiple" width="150" data-bind="options: names,optionsText:function(data){ return returnFullName(data);}"></select>
    

    的jsfiddle: -

    http://jsfiddle.net/mtfv6q6a/51/

相关问题