{
    "componentChunkName": "component---src-templates-doc-page-jsx",
    "path": "/angular-data-grid/row-models/",
    "result": {"data":{"markdownRemark":{"htmlAst":{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The grid can be configured with different strategies for loading row data into the grid, which are\nencapsulated into different Row Models. Changing which Row Model the grid is using means changing\nthe strategy the grid is using for loading rows."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The grid comes with four row models:"}]},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Client-Side"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Server-Side"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Infinite"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Viewport"}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The Client-Side Row Model deals with client-side data. The Server-Side, Infinite and Viewport Row Models\ndeal with server-side data. The following is a summary of each:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n    "},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n        "},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Client-Side"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\n            This is the default. The grid will load all of the data into the grid in one go.\n            The grid can then perform filtering, sorting, grouping, pivoting and aggregation all in memory.\n        "}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"a","properties":{"href":"../client-side-model/"},"children":[{"type":"text","value":"Go to Client-Side Row Model"}]},{"type":"text","value":"\n    "}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n        "},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Infinite"}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\n            This will present the data to the user and load more data as the user scrolls down. Use this if you want to display a large, flat (not grouped) list of data.\n        "}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"a","properties":{"href":"../infinite-scrolling/"},"children":[{"type":"text","value":"Go to Infinite Row Model"}]},{"type":"text","value":"\n    "}]},{"type":"text","value":"\n    "},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n        "},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Server-Side"},{"type":"element","tagName":"enterprise-icon","properties":{},"children":[]}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\n            The Server-Side Row Model builds on the Infinite Row Model. In addition to lazy-loading the data as the user scrolls down, it also allows lazy-loading of grouped data with server-side grouping and aggregation. Advanced users will use Server-Side Row Model to do ad-hoc slice and dice of data with server-side aggregations.\n        "}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"a","properties":{"href":"../server-side-model/"},"children":[{"type":"text","value":"Go to Server-Side Row Model"}]},{"type":"text","value":"\n    "}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n        "},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Viewport"},{"type":"element","tagName":"enterprise-icon","properties":{},"children":[]}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"\n            The grid will inform the server exactly what data it is displaying (first and last row) and the server will provide data for exactly those rows only. Use this if you want the server to know exactly what the user is viewing, useful for updates in very large live datastreams where the server only sends updates to clients viewing the impacted rows.\n        "}]},{"type":"text","value":"\n        "},{"type":"element","tagName":"a","properties":{"href":"../viewport/"},"children":[{"type":"text","value":"Go to Viewport Row Model"}]},{"type":"text","value":"\n    "}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Which row model you use is set by the grid property "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"rowModelType"}]},{"type":"text","value":". "}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"api-documentation","properties":{"source":"grid-options/properties.json","section":"rowModels","names":"[\"rowModelType\"]"},"children":[]}]},{"type":"element","tagName":"h2","properties":{"id":"when-to-use","style":"position:relative;"},"children":[{"type":"text","value":"When to Use"},{"type":"element","tagName":"a","properties":{"href":"#when-to-use","ariaLabel":"when to use permalink","className":["docs-header-icon","after"]},"children":[{"type":"element","tagName":"svg","properties":{"id":"icon","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 32 32"},"children":[{"type":"element","tagName":"path","properties":{"d":"M29.25,6.76a6,6,0,0,0-8.5,0l1.42,1.42a4,4,0,1,1,5.67,5.67l-8,8a4,4,0,1,1-5.67-5.66l1.41-1.42-1.41-1.42-1.42,1.42a6,6,0,0,0,0,8.5A6,6,0,0,0,17,25a6,6,0,0,0,4.27-1.76l8-8A6,6,0,0,0,29.25,6.76Z"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M4.19,24.82a4,4,0,0,1,0-5.67l8-8a4,4,0,0,1,5.67,0A3.94,3.94,0,0,1,19,14a4,4,0,0,1-1.17,2.85L15.71,19l1.42,1.42,2.12-2.12a6,6,0,0,0-8.51-8.51l-8,8a6,6,0,0,0,0,8.51A6,6,0,0,0,7,28a6.07,6.07,0,0,0,4.28-1.76L9.86,24.82A4,4,0,0,1,4.19,24.82Z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Which row model you use will depend on your application. Here are some quick rules of thumb:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"If using "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"AG Grid Community"}]},{"type":"text","value":", use "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Client-Side Row Model"}]},{"type":"text","value":" if you want to load all your data into the browser, or "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Infinite Row Model"}]},{"type":"text","value":" if you want to load it in blocks."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"If using "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"AG Grid Enterprise"}]},{"type":"text","value":", use "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Client-Side Row Model"}]},{"type":"text","value":" if you want to load all your data into the browser, or "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Server-Side Row Model"}]},{"type":"text","value":" if you want to load it in blocks. Server-Side Row Model is Infinite Row Model plus more. So if you are an AG Grid Enterprise customer, you should prefer Server-Side Row Model over Infinite Row Model."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Don't use "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Viewport Row Model"}]},{"type":"text","value":" unless you understand what its advantages are and when you need them. We find many of our users use Viewport Row Model when they don't need to and end up with more complicated applications as a result."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Here are more detailed rules of thumb."}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"If you are not sure, use default "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/client-side-model/"},"children":[{"type":"text","value":"Client-Side"}]}]},{"type":"text","value":". The grid can handle massive amounts of data (100k+ rows). The grid will only render what's visible on the screen (40 rows approximately, depending on your screen size) even if you have thousands of rows returned from your server. You will not kill the grid with too much data - rather your browser will run out of memory before the grid gets into problems. So if you are unsure, go with Client-Side Row Model first and only change if you need to. With Client-Side, you get sorting, filtering, grouping, pivoting and aggregation all done for you by the grid. All of the examples in the documentation use the Client-Side model unless specified otherwise."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"If you do not want to shift all the data from your server to your client, as the amount of data is too large to shift over the network or to extract from the underlying datasource, then use either Infinite, Server-Side or Viewport. Each one takes data from the server in different ways."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Use "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/infinite-scrolling/"},"children":[{"type":"text","value":"Infinite"}]}]},{"type":"text","value":" or "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/server-side-model/"},"children":[{"type":"text","value":"Server-Side"}]}]},{"type":"text","value":" to bring back a list of data one block at a time from the server. As the user scrolls, the grid will ask for more rows. Server-Side has more features than Infinite and will allow row grouping, aggregation, lazy-loading of groups and slice and dice of data."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Use "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/viewport/"},"children":[{"type":"text","value":"Viewport"}]}]},{"type":"text","value":" if you want the server to know exactly what the user is looking at. This is best when you have a large amount of changing data and want to push updates to the client when the server-side data changes. Knowing exactly what the user is looking at means you only have to push updates to the relevant users. All the row models can receive updates but only the Viewport row model provides the server with the information of the rows the users currently sees on screen without scrolling."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"h2","properties":{"id":"row-model-comparisons","style":"position:relative;"},"children":[{"type":"text","value":"Row Model Comparisons"},{"type":"element","tagName":"a","properties":{"href":"#row-model-comparisons","ariaLabel":"row model comparisons permalink","className":["docs-header-icon","after"]},"children":[{"type":"element","tagName":"svg","properties":{"id":"icon","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 32 32"},"children":[{"type":"element","tagName":"path","properties":{"d":"M29.25,6.76a6,6,0,0,0-8.5,0l1.42,1.42a4,4,0,1,1,5.67,5.67l-8,8a4,4,0,1,1-5.67-5.66l1.41-1.42-1.41-1.42-1.42,1.42a6,6,0,0,0,0,8.5A6,6,0,0,0,17,25a6,6,0,0,0,4.27-1.76l8-8A6,6,0,0,0,29.25,6.76Z"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M4.19,24.82a4,4,0,0,1,0-5.67l8-8a4,4,0,0,1,5.67,0A3.94,3.94,0,0,1,19,14a4,4,0,0,1-1.17,2.85L15.71,19l1.42,1.42,2.12-2.12a6,6,0,0,0-8.51-8.51l-8,8a6,6,0,0,0,0,8.51A6,6,0,0,0,7,28a6.07,6.07,0,0,0,4.28-1.76L9.86,24.82A4,4,0,0,1,4.19,24.82Z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Below is a quick feature comparison of all the grid's features across all four row models."}]},{"type":"element","tagName":"div","properties":{},"children":[{"type":"element","tagName":"matrix-table","properties":{"src":"row-models/resources/row-models.json","rootnode":"features","columns":"{ \"feature\": \"Feature\", \"clientSide\": \"Client-Side\", \"infinite\": \"Infinite\", \"serverSide\": \"Server-Side\", \"viewport\": \"Viewport\" }"},"children":[]}]},{"type":"element","tagName":"h2","properties":{"id":"deeper-understanding-of-row-models","style":"position:relative;"},"children":[{"type":"text","value":"Deeper Understanding of Row Models"},{"type":"element","tagName":"a","properties":{"href":"#deeper-understanding-of-row-models","ariaLabel":"deeper understanding of row models permalink","className":["docs-header-icon","after"]},"children":[{"type":"element","tagName":"svg","properties":{"id":"icon","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 32 32"},"children":[{"type":"element","tagName":"path","properties":{"d":"M29.25,6.76a6,6,0,0,0-8.5,0l1.42,1.42a4,4,0,1,1,5.67,5.67l-8,8a4,4,0,1,1-5.67-5.66l1.41-1.42-1.41-1.42-1.42,1.42a6,6,0,0,0,0,8.5A6,6,0,0,0,17,25a6,6,0,0,0,4.27-1.76l8-8A6,6,0,0,0,29.25,6.76Z"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M4.19,24.82a4,4,0,0,1,0-5.67l8-8a4,4,0,0,1,5.67,0A3.94,3.94,0,0,1,19,14a4,4,0,0,1-1.17,2.85L15.71,19l1.42,1.42,2.12-2.12a6,6,0,0,0-8.51-8.51l-8,8a6,6,0,0,0,0,8.51A6,6,0,0,0,7,28a6.07,6.07,0,0,0,4.28-1.76L9.86,24.82A4,4,0,0,1,4.19,24.82Z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The grid follows an MVC pattern. Each data item is wrapped in a "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Row Node"}]},{"type":"text","value":" and then\nstored in the "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Row Model"}]},{"type":"text","value":". The grid rendering engine is called "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Row Renderer"}]},{"type":"text","value":" and\nlistens for changes to the row model and updates the DOM accordingly."}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Below shows a simplified version of a class diagram showing the relationships between\nthe major classes involved with the row models."}]},{"type":"element","tagName":"img","properties":{"src":"/archive/29.3.4/3b347b7e2e43681f1112eaa2daf3f481/row-models.svg","alt":"Diagram of Major Classes involved with the Row Models","style":"max-width: 100%; margin-bottom: 1rem;"},"children":[]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The following should be noted from the diagram:"}]},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The grid has exactly one "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowRenderer"}]},{"type":"text","value":" instance. The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowRenderer"}]},{"type":"text","value":" contains a reference to the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"PaginationProxy"}]},{"type":"text","value":" where it asks for the rows one at a time for rendering."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The grid has exactly one "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"PaginationProxy"}]},{"type":"text","value":" instance. The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"PaginationProxy"}]},{"type":"text","value":" will either a) do nothing if pagination is not active and just forward all requests to the Row Model or b) do pagination if pagination is active. The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"PaginationProxy"}]},{"type":"text","value":" has exactly one "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowModel"}]},{"type":"text","value":" instance."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"You can configure the grid to use any of the provided "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Row Models"}]},{"type":"text","value":" - that's why "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowModel"}]},{"type":"text","value":" is in italics, it means it's an interface, the concrete implementation is what you decide when configuring the grid. The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowModel"}]},{"type":"text","value":" contains a list of "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowNodes"}]},{"type":"text","value":". The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowModel"}]},{"type":"text","value":" may have a list of all the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowNodes"}]},{"type":"text","value":" (Client-Side Row Model) or have a datasource where it can lazy-load "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowNodes"}]},{"type":"text","value":"."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"A "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"RowNode"}]},{"type":"text","value":" has a reference to exactly one row data item (the client application provides the row data items). The "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowNode"}]},{"type":"text","value":" has state information about the row item, such as whether it is selected and the height of it."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"When there is a change of state in the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowNodes"}]},{"type":"text","value":", the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowModel"}]},{"type":"text","value":" fires a "},{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"modelUpdated"}]},{"type":"text","value":" event which gets the "},{"type":"element","tagName":"code","properties":{},"children":[{"type":"text","value":"RowRenderer"}]},{"type":"text","value":" to refresh. This happens for many reasons, or example the data is sorted, filtered, a group is opened, or the underlying data has changed."}]},{"type":"text","value":"\n"}]},{"type":"element","tagName":"h2","properties":{"id":"pagination","style":"position:relative;"},"children":[{"type":"text","value":"Pagination"},{"type":"element","tagName":"a","properties":{"href":"#pagination","ariaLabel":"pagination permalink","className":["docs-header-icon","after"]},"children":[{"type":"element","tagName":"svg","properties":{"id":"icon","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 32 32"},"children":[{"type":"element","tagName":"path","properties":{"d":"M29.25,6.76a6,6,0,0,0-8.5,0l1.42,1.42a4,4,0,1,1,5.67,5.67l-8,8a4,4,0,1,1-5.67-5.66l1.41-1.42-1.41-1.42-1.42,1.42a6,6,0,0,0,0,8.5A6,6,0,0,0,17,25a6,6,0,0,0,4.27-1.76l8-8A6,6,0,0,0,29.25,6.76Z"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M4.19,24.82a4,4,0,0,1,0-5.67l8-8a4,4,0,0,1,5.67,0A3.94,3.94,0,0,1,19,14a4,4,0,0,1-1.17,2.85L15.71,19l1.42,1.42,2.12-2.12a6,6,0,0,0-8.51-8.51l-8,8a6,6,0,0,0,0,8.51A6,6,0,0,0,7,28a6.07,6.07,0,0,0,4.28-1.76L9.86,24.82A4,4,0,0,1,4.19,24.82Z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Pagination can be applied to any of the row model types. The documentation on each row model type covers pagination for that row model type."}]},{"type":"element","tagName":"h2","properties":{"id":"grid-datasource","style":"position:relative;"},"children":[{"type":"text","value":"Grid Datasource"},{"type":"element","tagName":"a","properties":{"href":"#grid-datasource","ariaLabel":"grid datasource permalink","className":["docs-header-icon","after"]},"children":[{"type":"element","tagName":"svg","properties":{"id":"icon","xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 32 32"},"children":[{"type":"element","tagName":"path","properties":{"d":"M29.25,6.76a6,6,0,0,0-8.5,0l1.42,1.42a4,4,0,1,1,5.67,5.67l-8,8a4,4,0,1,1-5.67-5.66l1.41-1.42-1.41-1.42-1.42,1.42a6,6,0,0,0,0,8.5A6,6,0,0,0,17,25a6,6,0,0,0,4.27-1.76l8-8A6,6,0,0,0,29.25,6.76Z"},"children":[]},{"type":"element","tagName":"path","properties":{"d":"M4.19,24.82a4,4,0,0,1,0-5.67l8-8a4,4,0,0,1,5.67,0A3.94,3.94,0,0,1,19,14a4,4,0,0,1-1.17,2.85L15.71,19l1.42,1.42,2.12-2.12a6,6,0,0,0-8.51-8.51l-8,8a6,6,0,0,0,0,8.51A6,6,0,0,0,7,28a6.07,6.07,0,0,0,4.28-1.76L9.86,24.82A4,4,0,0,1,4.19,24.82Z"},"children":[]}]}]}]},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The "},{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/client-side-model/"},"children":[{"type":"text","value":"Client-Side"}]},{"type":"text","value":" row model does not need a datasource. "},{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/infinite-scrolling/"},"children":[{"type":"text","value":"Infinite"}]},{"type":"text","value":", "},{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/viewport/"},"children":[{"type":"text","value":"Viewport"}]},{"type":"text","value":" and "},{"type":"element","tagName":"a","properties":{"href":"/archive/29.3.4/server-side-model/"},"children":[{"type":"text","value":"Server-Side"}]},{"type":"text","value":" all use a datasource. The documentation on each row model type explains how to configure the datasource for the particular row model."}]}]},"frontmatter":{"title":"Row Models","version":null,"enterprise":null,"sideMenu":null,"description":null},"headings":[{"id":"when-to-use","depth":2,"value":"When to Use"},{"id":"row-model-comparisons","depth":2,"value":"Row Model Comparisons"},{"id":"deeper-understanding-of-row-models","depth":2,"value":"Deeper Understanding of Row Models"},{"id":"pagination","depth":2,"value":"Pagination"},{"id":"grid-datasource","depth":2,"value":"Grid Datasource"}]}},"pageContext":{"frameworks":["javascript","react","angular","vue"],"framework":"angular","srcPath":"/row-models","pageName":"row-models"}},
    "staticQueryHashes": ["1766026005","699667431","940729948"]}