【问题标题】:Kendo Angular's Auto complete showing object in resultsKendo Angular Autocomplete 在结果中显示对象
【发布时间】:2013-12-27 22:08:04
【问题描述】:

我正在尝试通过服务器过滤来使用 kendo angular 的自动完成小部件。服务调用后弹出窗口显示 [object Object] 并且这些的数量等于从服务器返回的结果。所以请你看看我的代码并指出我正在做的错误。

这是我的代码:

var oThis = this;
var uiQueryConfig = this.seUIConfigsCacheService.GetItem('OpportunityDashboard');

var dataSource = new kendo.data.DataSource({
serverFiltering: true,
serverPaging: true,
pageSize: 20,
transport: {
   read: function (options) {
           oThis.getDataFromServer(options, uiQueryConfig, false, options.data.filter.filters[0].value);
         }
   }
});

$scope.dataSource = dataSource;

这里是getDataFromServer的定义:

getDataFromServer(options: any, uiConfig: Model.UIConfig, recordsCountNeeded: boolean, searchText?: string): void {

var searchParam = new Model.SearchParamsCM();
searchParam.PageIndex = options.data.page;
searchParam.PageSize = options.data.pageSize;
searchParam.SearchText = searchText;

var oThis = this;

this._seHttpService.GetWithParms('/spa/api/genericrequest', searchParam)
    .then(function (result) {
        var datum = oThis.createJSONFromResults(result.data, uiConfig);

        if (recordsCountNeeded) //grid
            options.success(datum);
        else //auto complete
            options.success(datum.data);
        },
        function (result) {
            options.error(result);
    });
 }

代码在打字稿中。

这是在模板中:

<input id="name" kendo-auto-complete k-min-length="3" k-data-text-field="name" k-ignore-case="true" k-data-source="dataSource" ng-model="searchText" />

我尝试调试 options.success 函数,发现那里的参数值还有很多其他信息,包括从服务器返回的整个对象,而不是我传递给它的那个,即 datum.data。

感谢期待!

编辑: 好的,我已经整理好了。实际上有两个问题,首先 k-data-text-field 中的变量名应该用单引号括起来,即 k-data-text-field="'name'"。其次,变量名称区分大小写,因此应该是 k-data-text-field="'Name'"

【问题讨论】:

  • 您能看一下数据源中的数据吗?数据源._data。使用 chrome 控制台查看数据结构。您那里的数据对象是否有一个名为 name 的属性?是字符串吗?
  • 我不确定如何检查 dataSource._data,因为该服务是在传输的 dataSource 的读取属性中调用的。这个函数里面的数据源还没有建好,去哪里查看呢?
  • 好的,我已经检查了自动完成选择事件中的数据源。是的,我的数据在那里,它是一个对象集合,其中有一个名为 Name 的属性。
  • 您应该以正确的答案结束问题,而不是评论,而不是编辑。谢谢

标签: javascript angularjs autocomplete kendo-ui


【解决方案1】:

好的,我已经整理好了。实际上有两个问题,首先 k-data-text-field 中的变量名应该用单引号括起来,即k-data-text-field="'name'"。其次,变量名区分大小写,所以应该是k-data-text-field="'Name'"

【讨论】:

    【解决方案2】:

    如果你想从过多的属性中解放你的 HTML,你可以像这样将 k-options 属性传递给你的 kendo 元素:

    <input id="name" kendo-auto-complete k-options="acOptions" k-data-source="dataSource" ng-model="searchText" />
    

    然后像这样在您的范围内定义选项:

    $scope.acOptions = {
       minLength: 3,
       dataTextField: 'name'
       ignoreCase: true
    }
    

    【讨论】:

      猜你喜欢
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2017-03-19
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多