2

J'utilise la bibliothèque Knockout-Kendo.js pour mon SPA js + HTML5. Dans mon viewmodel j'ai un myItems Knockout Observable Array. J'ai un référentiel côté client qui est chargé d'obtenir des données du serveur et de le conserver. Je veux être en mesure de remplir myItems dans mon viewmodel basé sur une requête POST à ​​une API qui envoie un objet filtre (contenant des filtres et des informations de pagination) au serveur et retourne une liste d'éléments filtrés.Serveur pagination dans Knockout-Kendo Grille lié à la propriété ko.observableArray local (rempli par le serveur) dans viewmodel

  • Autant que je sache, le Knockout-Kendo ne prend pas en charge Kendo Grid DataSource. Je devrais définir la source via son data propriété instesd de dataSource. Ai-je raison? Si oui, puis-je répondre aux exigences de la question ci-dessous?
  • Comment puis-je définir les options de la grille pour définir le nombre total de résultats, le numéro de page, le haut, le saut, etc. pour la radiomessagerie du serveur? (Je devrais être en mesure de définir mon objet de filtre dans viewmodel basé sur le numéro de page cliqué de Kendo Grid par exemple, et l'envoyer avec ma requête POST au serveur.)
  • Aussi, pour être en mesure d'obtenir le nombre total d'éléments pour la pagination, devrais-je recevoir des données JSON du serveur dans un format comme celui-ci: {total: 675, data: {some JSON array containing items for the current page}} ou existe-t-il des alternatives pour y parvenir?

Répondre

2

Vous pouvez réellement utiliser une source de données directement si vous en avez besoin dans Knockout-Kendo. Si vous spécifiez l'option data avec false ou {} et que vous spécifiez également l'option dataSource, il l'utilisera.

Par exemple, vous pouvez lier comme:

<div data-bind="kendoGrid: gridOptions"></div> 

Avec un modèle de vue:

var grid = { 
    data: false, 
    dataSource: { 
    type: "odata", 
    transport: { 
     read: "http://demos.kendoui.com/service/Northwind.svc/Orders" 
    }, 
    schema: { 
     model: { 
     fields: { 
      OrderID: { 
      type: "number" 
      }, 
      Freight: { 
      type: "number" 
      }, 
      ShipName: { 
      type: "string" 
      }, 
      OrderDate: { 
      type: "date" 
      }, 
      ShipCity: { 
      type: "string" 
      } 
     } 
     } 
    }, 
    pageSize: 50, 
    serverPaging: true, 
    serverFiltering: true, 
    serverSorting: true 
    }, 
    height: 250, 
    sortable: true, 
    pageable: true, 
    columns: [{ 
    field: "OrderID", 
    filterable: false 
    }, 
    "Freight", { 
    field: "OrderDate", 
    title: "Order Date", 
    width: 100, 
    format: "{0:MM/dd/yyyy}" 
    }, { 
    field: "ShipName", 
    title: "Ship Name", 
    width: 200 
    }, { 
    field: "ShipCity", 
    title: "Ship City" 
    }] 
}; 

ko.applyBindings({ 
    gridOptions: grid 
}); 

Exemple ici: http://jsfiddle.net/rniemeyer/shwrb/

+0

Est-ce que cela gardera un ccessable knockout observableArray des données liées? Mon problème avec la grille de kendoui est que je l'aime et j'utilise aussi KO religieusement mais je suis coincé entre un knock-out et un kendoui datamodel pour la grille même avec les liaisons KO. Plus précisément, comment puis-je accéder à un tableau observable des données actuellement liées à la grille une fois que le tri du filtrage de pagination est terminé? – t316

0

dataSource: {pageSize: 20} préciser comme celui-ci .... si vous mentionnez seulement page Taille: 20 comme ça, ça ne fonctionne pas

Questions connexes