Knockout绑定到Select optionsText以获取fullName

时间:2016-07-21 06:23:08

标签: knockout.js

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

JsFiddle

当我这样做时,它有效as in Knockout doc

private class MyWebChromeClient extends WebChromeClient {

        @Override
        public void onConsoleMessage(String message, int lineNumber, String sourceID) {
            Log.d(TAG, message + " -- From line "
                    + lineNumber + " of "
                    + sourceID);
        }
    }

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

这是我的选择,

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

在我的视图模型中,

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

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

我错过了什么吗?

1 个答案:

答案 0 :(得分: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/