如何检查Kendo UI ComboBox是否脏(即值已从默认值更改)?

时间:2016-08-10 18:18:51

标签: javascript html css kendo-ui

我有一个简单的剑道ComboBox

HTML:

<div>
    <h5>Brand</h5>
    <div id="combo1"></div>
</div>

JavaScript的:

j$("#combo1").kendoComboBox({
    dataTextField: "name",
    dataValueField: "id",
    value: "Original_Brand_Value",
    dataSource: {
        transport: {
            read: {
                url: "..."
            }
        }
    }
});

请注意,ComboBox的默认初始值为"Original_Brand_Value"。如何检查剑道ComboBox是否&#34;脏&#34;即目前的值是否为"Original_Brand_Value" ?似乎我应该能够做类似的事情:

j$("#combo1").data("kendoComboBox").isChanged() 
**OR**
j$("#combo1").data("kendoComboBox").dataSource.isChanged() 

但是我搜索的范围很广,似乎没有这样的方法。必须有一些方法可以做到这一点,这必须是一个常见的用例。

2 个答案:

答案 0 :(得分:1)

您可以使用value()方法检查当前窗口小部件值并将其与初始值进行比较,但可能这种方法不合适,因为它太明显了。

http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox#methods-value

另一种可能的选择是订阅窗口小部件的change事件,并在JavaScript变量中引发自定义脏标志。您甚至可以在ComboBox小部件对象上设置expando。

http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox#events-change

另外,ComboBox是一个输入小部件,应该保存并提交表单值。这就是为什么应该从inputselect元素创建它,而不是从div创建。

答案 1 :(得分:1)

如您所知,kendoComboBox小部件本身不会跟踪它是否已更改状态。数据源确实有一个hasChanges()方法,但进行选择不会更改数据源,只是从中获取不同的值。但是,kendoComboBox会引发您可以使用的事件,例如&#39; select&#39;当用户进行选择时触发:http://docs.telerik.com/kendo-ui/api/javascript/ui/combobox#events-select

例如,您可以将其添加到您的comboBox配置中:

select: function(e) {
    var item = e.item; //jQuery object representing the selection
    isDirty = true; //Set a flag or call a function as required. Perhaps check the item as well to make sure it isn't the default value.
}

另外,还有一种称为“选择”的方法。可用于获取或设置所选项目。您可以使用它来获取所选索引(如果它不为零,则comboBox具有非默认选择):

var selectedIndex = j$("#combo1").data("kendoComboBox").select();

这不是唯一的方法。如果您使用MVVM声明性语法并将comboBox绑定到kendo.Data.Model(可观察)上的属性,则任何更改都将自动在该模型上设置脏标志:http://docs.telerik.com/kendo-ui/api/javascript/data/model#fields-dirty

MVVM是一个非常强大的设计模式,可以与kendo一起使用,但我认为进入更多细节超出了你所要求的范围。