Javascript 扩展MultiSelect小部件会中断MVVM中的值绑定

Javascript 扩展MultiSelect小部件会中断MVVM中的值绑定,javascript,jquery,jquery-plugins,mvvm,kendo-ui,Javascript,Jquery,Jquery Plugins,Mvvm,Kendo Ui,我扩展了multiselect小部件,没有什么特别之处。问题是价值观的约束不再有效。在第一个示例中,我使用的是本机小部件,可以很好地绑定值。第二种方法是使用扩展的multiselect,它在值绑定上失败,为空 HTML: 我想我可以再次为“值”重新创建活页夹,但这确实是一个bug吗?我有一个JSFIDLE演示了这一点:这不是一个bug,因为multiselect为它设置了自定义绑定。您可以尝试为新的扩展角色复制multiselect的绑定 试试这个: kendo.data.binders.w

我扩展了multiselect小部件,没有什么特别之处。问题是价值观的约束不再有效。在第一个示例中,我使用的是本机小部件,可以很好地绑定值。第二种方法是使用扩展的multiselect,它在值绑定上失败,为空

HTML:


我想我可以再次为“值”重新创建活页夹,但这确实是一个bug吗?我有一个JSFIDLE演示了这一点:

这不是一个bug,因为multiselect为它设置了自定义绑定。您可以尝试为新的扩展角色复制multiselect的绑定

试试这个:

 kendo.data.binders.widget.multiselectcustom = kendo.data.binders.widget.multiselect;
您可以将它放在小部件扩展代码之前/之后,但这应该告诉绑定函数如何正确绑定到小部件


我还想看一下定制活页夹的剑道文档,尽管它不是很好,但它不应该带来所有相关的东西吗?你会希望活页夹能起作用。不过,这是一个干净的解决办法。所有扩展的widget都必须这样做吗?我也这么认为,我认为应该这样做,但是你能做什么呢?您可以扩展kendo.ui.Widget的extend方法来实现这种功能,但我从未对此进行过测试。您不需要为每个扩展小部件执行此操作,只需要为那些具有特殊的每个小部件绑定的小部件执行此操作,到目前为止,这只是multiselect。通过查看kendo.data.binders.widget,您可以了解我的意思,并看到只有multiselect,这是特定的。内部剑道首先检查特定于小部件角色的绑定,然后在GeneralTransks中检查小部件名称空间以获取额外信息。剑道支持没有承认这是一个错误,所以我试图说服他们。同时,你的工作环境是干净的,效果很好!!没问题,这让我疯狂了一会儿,很高兴能帮我减轻痛苦
//EXTEND MULTISELECT WITH NOTHING MUCH
kendo.ui.plugin(kendo.ui.MultiSelect.extend({
    init: function(element, options) {
        kendo.ui.MultiSelect.fn.init.call(this, element, options);
    },
    options: {
        name: 'MultiSelectCustom'
    }
}));

varviewModel = kendo.observable({
    selectedIDs: [ 1, 3 ],
    selectData: [{
        Name: 'Bill Smith',
        ID: 1
    }, {
        Name: 'Jennifer Jones',
        ID: 2
    }, {
        Name: 'Tim Philips',
        ID: 3
    }]
});

kendo.bind('body', viewModel);
 kendo.data.binders.widget.multiselectcustom = kendo.data.binders.widget.multiselect;