Knockout JS和Chosen multiselect无效

pea*_*ker 6 php jquery jquery-chosen knockout.js

我正在使用knockout js和所选的插件(https://github.com/harvesthq/chosen)来尝试做一个好看的多选.

我已尝试过各种方法,但无法使用多选项来处理我正在使用的数据.当我单击多选时,即使选项绑定包含正确的数据,也不会显示任何值.

HTML:

<select multiple="multiple" data-bind="options: allCustomers, 
selectedOptions: event().customers, optionsText: 'name', 
optionsValue: 'id', chosen: true " ></select>?
Run Code Online (Sandbox Code Playgroud)

视图模型的简化版本:

    function Event()
    {
        this.customers = ko.observableArray();
    };                     

    //for chosen plugin
    ko.bindingHandlers.chosen = {
        update: function(element, valueAccessor, allBindingsAccessor, viewModel)  {
            $(element).chosen();
        }
    }

    function ViewModel()
    {   
        this.event = ko.observable(new Event());
        this.allCustomers = ko.observableArray();
    };

    var viewModel = new ViewModel();

    $.getJSON("/get_json", function(data) 
    {                                  
        for (var c = 0; c < data.customers.length; c++)
        {
            viewModel.allCustomers.push(data.customers[c]);
        }   
    });

    ko.applyBindings(viewModel);   
Run Code Online (Sandbox Code Playgroud)

PHP:

function get_json()
{
    $eventData = array(
        'customers' => array(array('name' => 'Bob', 'id' => 1), array('name' => 'John', 'id' => 2)),
        'moreData' => array(),
        'evenMoreData' => array()
        );

    echo json_encode($eventData);
}
Run Code Online (Sandbox Code Playgroud)

这将显示所选样式的选择框,但当我单击它时,不会显示任何选项.

当我创建了客户视图模型本地JS数组,并传递到allCustomers,多选正常工作(见我的jsfiddle),所以它是与从服务器获取数据,但我已经在这个一直盯着而且看不出问题!

任何帮助非常感谢

pea*_*ker 16

在@Tyrsius建议在初始绑定后可能没有更新数据后,我发现了这个问题.

$(element).trigger("liszt:updated");像这样添加到自定义绑定:

ko.bindingHandlers.chosen = {
    update: function(element, valueAccessor, allBindingsAccessor, viewModel)  {
        $(element).chosen();
        $(element).trigger("liszt:updated");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 只是想对此答案表示非常感谢! (3认同)
  • 我用淘汰赛3.0尝试了这个.问题是,当绑定启动时,会触发一次.将项目推入数组不会触发此绑定更新.我想知道这是因为Knockout优化还是我做错了什么.你能发布一个如何使用这个绑定的例子吗? (3认同)