0

Я работаю с Angular 1.4.9 с машинописным текстом, и я хотел бы отображать твилист, где данные поступают с сервера, называемого Restangular. Таким образом, у меня есть пользовательский метод транспорта в Kendo DataSource, как вы можете видеть ниже.Почему Kendo TreeList DataSourceTransport с пользовательским методом чтения, написанным на машинописном машинописном материале?

К сожалению, до сих пор я не обладаю опытом работы с машинописью.

Вопрос:

Когда страница загружается затем Кендо TreeList запускает readRepository метода, чтобы получить данные с сервера, когда данные или неполные данные - то есть строка -, загружается то срабатывает многие звонки на сервер, для меня это кажется, когда он получает строку данных, которую он использует, и снова вызывает сервер снова. Я не понимаю, почему.

enter image description here

Пожалуйста, найдите соответствующий код прилагается!

То, что я сделал до сих пор:

  • Я создал тот же контроллер, написанный на Javascript и он работает как шарм
  • Я попытался изменить то, как DataSourceTransport.read вызывает метод это. readRepository в соответствии с ответом this, но результат тот же.

ShowTestSuitTreeController написано в машинописи:

module sayusiando.gonogo.web.spa.mainpage.showtestsuittree.controllers { 
    import IGeneralTestSuitTestCaseContract = sayusiando.gonogo.web.spa.common.contracts.IGeneralTestSuitTestCaseContract; 
    import DataSourceTransport = kendo.data.DataSourceTransport; 
    import DataSourceSchema = kendo.data.DataSourceSchema; 
    import DataSourceSchemaModelFields = kendo.data.DataSourceSchemaModelFields; 
    import TestManagementService = sayusiando.gonogo.web.spa.service.ITestManagementService; 
    "use strict"; 

    export interface IShowTestSuitTreeController { 
     activate:() => void; 
    } 

    class ShowTestSuitTreeController implements IShowTestSuitTreeController { 

     //#region Variables 
     testSuiteTree = []; 
     testSuiteTreeKendoTreeListOptions: kendo.ui.TreeListOptions = {}; 
     //#endregion 

     //#region Inject and ctor 
     static $inject: string[] = ['testManagementService']; 

     constructor(
      private testManagementService: gonogo.web.spa.service.ITestManagementService 
     ) { 

      this.activate(); 

     } 
     //#endregion 

     activate(): void { 

      var dataSourceTransport = <DataSourceTransport>{ 
       //read: this.readRepository.bind(this) 
       read: (e) => this.readRepository(e) 
      }; 

      var schema: DataSourceSchema = <DataSourceSchema>{ 
       model: { 
        id: "id", 
        parentId: "parentId", 
        fields: <DataSourceSchemaModelFields>{ 

         id: { type: "number", editable: false, nullable: true }, 
         name: { type: "string", editable: false, nullable: true } 

        } 

       } 

      }; 

      var dataSource = new kendo.data.TreeListDataSource({ 
       transport: dataSourceTransport, 
       schema: schema, 
       batch: true 
      }); 


      var idColumn: kendo.ui.TreeListColumn = <kendo.ui.TreeListColumn>{ 
       field: "id", 
       width: "100px" 
      }; 
      var nameColumn: kendo.ui.TreeListColumn = <kendo.ui.TreeListColumn>{ 
       field: "name", 
       width: "400px" 
      }; 

      this.testSuiteTreeKendoTreeListOptions.dataSource = dataSource; 
      this.testSuiteTreeKendoTreeListOptions.sortable = false; 
      this.testSuiteTreeKendoTreeListOptions.editable = false; 
      this.testSuiteTreeKendoTreeListOptions.columns = [ 
       idColumn, 
       nameColumn 
      ]; 

     } 

     readRepository(e): any { 

      this.testManagementService.getTestSuitTree().then((result: Array<IGeneralTestSuitTestCaseContract>): void => { 
       e.success(result); 
      }, (reason: any): void => { 
       e.error(reason); 
      }); 

      console.log('e', e); 

      return e; 
     } 

    } 

    angular 
     .module("goNoGo") 
     .controller("showTestSuitTreeController", ShowTestSuitTreeController); 
} 

Сгенерированный JavaScript:

var sayusiando; 
(function (sayusiando) { 
    var gonogo; 
    (function (gonogo) { 
     var web; 
     (function (web) { 
      var spa; 
      (function (spa) { 
       var mainpage; 
       (function (mainpage) { 
        var showtestsuittree; 
        (function (showtestsuittree) { 
         var controllers; 
         (function (controllers) { 
          "use strict"; 
          var ShowTestSuitTreeController = (function() { 
           function ShowTestSuitTreeController(testManagementService) { 
            this.testManagementService = testManagementService; 
            //#region Variables 
            this.testSuiteTree = []; 
            this.testSuiteTreeKendoTreeListOptions = {}; 
            this.activate(); 
           } 
           //#endregion 
           ShowTestSuitTreeController.prototype.activate = function() { 
            var _this = this; 
            var dataSourceTransport = { 
             //read: this.readRepository.bind(this) 
             read: function (e) { return _this.readRepository(e); } 
            }; 
            var schema = { 
             model: { 
              id: "id", 
              parentId: "parentId", 
              fields: { 
               id: { type: "number", editable: false, nullable: true }, 
               name: { type: "string", editable: false, nullable: true } 
              } 
             } 
            }; 
            var dataSource = new kendo.data.TreeListDataSource({ 
             transport: dataSourceTransport, 
             schema: schema, 
             batch: true 
            }); 
            var idColumn = { 
             field: "id", 
             width: "100px" 
            }; 
            var nameColumn = { 
             field: "name", 
             width: "400px" 
            }; 
            this.testSuiteTreeKendoTreeListOptions.dataSource = dataSource; 
            this.testSuiteTreeKendoTreeListOptions.sortable = false; 
            this.testSuiteTreeKendoTreeListOptions.editable = false; 
            this.testSuiteTreeKendoTreeListOptions.columns = [ 
             idColumn, 
             nameColumn 
            ]; 
           }; 
           ShowTestSuitTreeController.prototype.readRepository = function (e) { 
            this.testManagementService.getTestSuitTree().then(function (result) { 
             e.success(result); 
            }, function (reason) { 
             e.error(reason); 
            }); 
            console.log('e', e); 
            return e; 
           }; 
           //#endregion 
           //#region Inject and ctor 
           ShowTestSuitTreeController.$inject = ['testManagementService']; 
           return ShowTestSuitTreeController; 
          }()); 
          angular 
           .module("goNoGo") 
           .controller("showTestSuitTreeController", ShowTestSuitTreeController); 
         })(controllers = showtestsuittree.controllers || (showtestsuittree.controllers = {})); 
        })(showtestsuittree = mainpage.showtestsuittree || (mainpage.showtestsuittree = {})); 
       })(mainpage = spa.mainpage || (spa.mainpage = {})); 
      })(spa = web.spa || (web.spa = {})); 
     })(web = gonogo.web || (gonogo.web = {})); 
    })(gonogo = sayusiando.gonogo || (sayusiando.gonogo = {})); 
})(sayusiando || (sayusiando = {})); 
//# sourceMappingURL=showTestSuitTreeController.js.map 

Контроллер javscript, который работает отлично:

(function() { 
    'use strict'; 

    angular 
     .module('goNoGo') 
     .controller('showTestSuitTreeController2', showTestSuitTreeController2); 

    showTestSuitTreeController2.$inject = ['testManagementService']; 

    function showTestSuitTreeController2(testManagementService) { 
     /* jshint validthis:true */ 
     var vm = this; 



     activate(); 

     function activate() { 

      vm.testSuiteTreeKendoTreeListOptions = { 
       dataSource: { 
        transport: { 
         read: getTestSuiteTree 
        }, 
        schema: { 
         model: { 
          id: "id", 
          parentId: "parentId", 
          fields: { 
           Id: { type: "number", editable: false, nullable: false }, 
           ParentId: { type: "number", editable: false, nullable: false }, 
           Name: { type: "string", editable: false, nullable: false } 
          } 
         } 
        } 
       }, 
       sortable: false, 
       editable: false, 
       columns: [ 
        { field: "id", width: "30px" }, 
        { field: "name", width: "300px" } 
       ] 
      }; 

     } 

     function getTestSuiteTree(e) { 

      testManagementService.getTestSuitTree().then(function (result) { 
       e.success(result.plain()); 
      }, function (error) { 
       e.error(error); 
      }); 

      console.log('e', e); 

      return e; 
     } 
    } 
})(); 

ответ

0

че Решение состоит в том, что должен быть вызван метод plain() результата. Результат предоставлен Restangular.