Angularjs 如何验证用户是否在剑道UI自动完成小部件上进行了选择?

Angularjs 如何验证用户是否在剑道UI自动完成小部件上进行了选择?,angularjs,kendo-ui,autocomplete,Angularjs,Kendo Ui,Autocomplete,我在我的web应用程序中添加了一个剑道UI自动完成小部件。现在,它被绑定到一个静态名称列表,但是当它进入生产环境时,它将需要能够从数据源动态获取名称 在数据源中,每个名称都有一个ID,但用户从未看到该ID,因为它是一个人工密钥 如果用户输入“Sam H”,Kendo可能会建议用户在表格中填写“Sam Harris”或“Sam Houston”。如果用户选择其中一个,或者手动键入这两个名称中的一个,则在提交表单时,可以将该名称与数据源和找到的ID进行比较。(因为最终,我们希望存储所选用户的ID)

我在我的web应用程序中添加了一个剑道UI自动完成小部件。现在,它被绑定到一个静态名称列表,但是当它进入生产环境时,它将需要能够从数据源动态获取名称

在数据源中,每个名称都有一个ID,但用户从未看到该ID,因为它是一个人工密钥

如果用户输入“Sam H”,Kendo可能会建议用户在表格中填写“Sam Harris”或“Sam Houston”。如果用户选择其中一个,或者手动键入这两个名称中的一个,则在提交表单时,可以将该名称与数据源和找到的ID进行比较。(因为最终,我们希望存储所选用户的ID)

但是,我需要处理这样的情况,即用户可能输入的名称与数据源中的任何内容都不匹配。在这种情况下,web应用程序应该阻止用户提交表单,并建议用户做出有效选择

我该怎么做


(我在AngularJS 1.6中使用剑道UI)

这里您可以找到一些绑定的示例以及如何使用它。我找到了一个我正在做的项目的例子

    <input kendo-auto-complete ng-model="country" k-data-source="countryNames" k-options="autocompleteoptions" />

<script>
  angular.module("KendoDemos", [ "kendo.directives" ])
          .controller("MyCtrl", function($scope){
                        $scope.autocompleteoptions = {
                //dataSource: items,
                //dataTextField: "name",
                //dataValueField: "id",
                //filter: "contains",
                minLength: 2,
                select: function (e) {
                  console.log(e);
                    var dataItem = this.dataItem(e.item.index());
                    console.log(dataItem);
                }
              }

              $scope.countryNames = [
              "Albania",
              "Andorra",
              "Armenia",
              "Austria",
                  ];
          })
</script>

angular.module(“KendoDemos”[“kendo.directives”])
.controller(“MyCtrl”,函数($scope){
$scope.autocompleteoptions={
//数据源:项目,
//dataTextField:“名称”,
//dataValueField:“id”,
//过滤器:“包含”,
最小长度:2,
选择:功能(e){
控制台日志(e);
var dataItem=this.dataItem(e.item.index());
console.log(数据项);
}
}
$scope.countryNames=[
“阿尔巴尼亚”,
“安道尔”,
“亚美尼亚”,
“奥地利”,
];
})
以dojo为例:

这里还有一些关于Angular JS绑定的信息:

希望这对你有帮助


干杯

我们已经有一段时间没有使用剑道UI控件了,所以我不确定这是否可行,但一般来说,当使用自动完成时,虽然控件中显示了漂亮的文本,
ng model
通常是所选值(或对象本身)的ID。这样,如果用户未进行选择或选择无效,则
ng model
无效,无法提交表单。这就是
uib-typeahead
指令的工作原理。我曾经在jQuery UI中做过类似的事情,但在我看到的Kendo UI示例中,它们只使用字符串列表,但AngularJS文档非常稀疏。@DanielAllenLangdon您尝试过我的答案了吗。你的问题解决了吗?