{"id":395,"date":"2012-08-13T08:16:00","date_gmt":"2012-08-13T08:16:00","guid":{"rendered":"https:\/\/staging.infragistics.com\/blogs\/?p=395"},"modified":"2025-02-26T08:30:44","modified_gmt":"2025-02-26T08:30:44","slug":"jquery-grid-checkbox-column","status":"publish","type":"post","link":"https:\/\/www.infragistics.com\/blogs\/jquery-grid-checkbox-column","title":{"rendered":"jQuery Grid Checkbox Column Alternatives"},"content":{"rendered":"\n<p>The checkbox column (introduced with the last release, see this post on Using Checkbox Columns with the Infragistics jQuery Grid) was created to provide a \u2018shortcut\u2019 for transforming columns with Boolean values into checkboxes and mostly became reality due to the great interest in such functionality from customers (and after all it does make perfect sense).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/Checkbox-Columns-Alternatives\/jquery-grid-checkbox-column.png\" alt=\"jQuery Grid Checkbox column\"\/><\/figure>\n\n\n\n<p>Of course, this isn\u2019t a perfect world and creating defaults that can fit everyone\u2019s needs is probably a lost cause. If you take a look at the introductory blog above, it is indeed saving tons of time \u2013 setting a single property is all it takes. That\u2019s good and all, but as it can even be seen in the comments there and on our forums there is a limitation \u2013 the checkbox column works just great, but it goes all shy when some templating is involved.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"the-problem\">The Problem<\/h2>\n\n\n\n<p>In the <a title=\"INFRAGISTICS NETADVANTAGE JQUERY API REFERENCE\" href=\"https:\/\/www.igniteui.com\/help\/api\/2013.2\/\" rel=\"noopener\">Grid API reference<\/a> under \u2018renderCheckboxes\u2019 it says \u201cThat option is not available when jQueryTemplating is used.\u201d That\u2019s just a slight bit misleading and is most certainly going to get updated, since this does, in fact, include our own <a title=\"High performance jQuery templating engine\" href=\"https:\/\/www.igniteui.com\/templating-engine\/overview\" rel=\"noopener\">Templating Engine<\/a>. So in essence the above should be read as \u2018That option is not available when Templating is used\u2019. That is because, by design, the Checkbox column feature is suppressed in such cases, as a row template may have its own rendering for the column.<\/p>\n\n\n\n<p>That may or may not be an intuitive explanation as to why it will not be available with column template as well, but once you think about it \u2013 the grid renders rows, it has a default template to do that \u2013 a row template. You defining a column simply ends up being included somewhere along the way in that row template, instead of the default. That is why, templating in general will disable this feature.<\/p>\n\n\n\n<p>But not to worry, there are options as always. I stumbled upon this and since customer feedback pointed this out for us (Keep it up, we like constructive feedback!) in this blog I\u2019ll share my experience with coming up for alternative ways&nbsp; to have such functionality.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"the-solution\">The Solution<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Template Checkbox<\/h3>\n\n\n\n<p>Odd enough the problem is also main part of the solutions as it is the easiest way to alter the UI representation of your data and is also very flexible to be tweaked to your liking. Using this to add checkboxes in not all new (<a title=\"Forums \u00bb NetAdvantage for jQuery \u00bb igGrid \u00bb Infragistics IGGrid with checkbox\" href=\"\/community\/forums\/f\/ignite-ui-for-javascript\/64525\/infragistics-iggrid-with-checkbox\/339865#339865\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/users.infragistics.com\/dpetev\/external_link.PNG\" alt=\"Forums \u00bb NetAdvantage for jQuery \u00bb igGrid \u00bb Infragistics IGGrid with checkbox\" width=\"15\"><\/a>) and as mentioned the feature itself is meant to be a shortcut for that.<\/p>\n\n\n\n<p><strong>A fair warning:<\/strong>&nbsp; I&#8217;m sharing my experience and because of that I\u2019ll go through two different approaches I took. Before diving in using one, make sure you have seen and considered both.<\/p>\n\n\n\n<p>So the first approach is to use a plain HTML input of type checkbox tag and assign it our value. This is the approach you can see in both forum posts linked above as well. You can apply the template to your row template (if you are already using one) or simple assign it to a single column. For demonstration purposes I\u2019ll use the Employees table from AdventureWorks (<a title=\"AdventureWorks Sample Databases (MSDN)\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/ms124501(v=sql.100).aspx\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/users.infragistics.com\/dpetev\/external_link.PNG\" alt=\"AdventureWorks Sample Databases (MSDN)\" width=\"15\"><\/a>) for the Salaried flag column and here is how a grid configuration would look like:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$(\"#grid\").igGrid({\n    primaryKey: \"BusinessEntityID\",\n    height: 550,\n    dataSource: \"@Url.Action(\"Employees\")\",\n    autoGenerateColumns: false,\n    columns: [\n        { key: \"BusinessEntityID\", width: \"50px\", headerText: \"ID\", dataType: \"number\" , template: \"&lt;a style=\\'font-size:20px;\\' href=\\'http:\/\/msdn.microsoft.com\/en-us\/library\/ms124432(v=sql.100).aspx\\'>${BusinessEntityID}&lt;\/a>'},\n        { key: \"LoginID\", width: \"250px\", headerText: \"Login ID\", dataType: \"string\" },\n        { key: \"JobTitle\", width: \"220px\" , headerText: \"Job Title\", dataType: \"string\" },\n        { key: \"SalariedFlag\", width: \"120px\", headerText: \"SalariedFlag\", dataType: \"bool\", template: \"&lt;input type=\\\"checkbox\\\" {{if ${SalariedFlag} === \\\"true\\\"}} checked=\\\"checked\\\" {{\/if}} disabled=\\\"disabled\\\" style=\\'display: block; margin-left: auto; margin-right: auto;\\'>'}\n    ],\n    features: [\n        { name: \"Filtering\", mode: \"advanced\", type: \"local\" },\n        { name: \"Sorting\", type: \"local\" }]\n});<\/pre>\n\n\n\n<p>Do note that the first column also has a template \u2013 a link to the very same table\u2019s description on MSDN \u2013 and, as it is visible, that does not stop the checkboxes from appearing in addition to working just fine with features such as sorting and filtering:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/Checkbox-Columns-Alternatives\/basic-alternative-checkbox-column.png\" alt=\"A basic alternative to the checkbox column using template and simple HTML input type checkbox.\" title=\"A basic alternative to the checkbox column using template and simple HTML input type checkbox.\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Enhancements<\/h3>\n\n\n\n<p>The above template is but a mere rendering tweak and doesn\u2019t come with an interaction package. One other fair point made by customers is that the default interaction can be improved as Checkbox column requires 3 clicks to update \u2013 which is how row editing with selection behaves \u2013 1 click to select, another to enter edit and third to change the value. Event though this wasn\u2019t the original issue, since you are now in control of the checkboxes, why not improve things a bit?<\/p>\n\n\n\n<p>The first step is to remove the disabled part, of course. Then you would need to handle user interaction with the checkbox \u2013 so add something along the lines of:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">data-rowid=\\\"${BusinessEntityID}\\\" onchange=\\\"checkboxChanged(event);\\\"<\/pre>\n\n\n\n<p>to the template. For enabled checkbox inputs onchange and click events are basically interchangeable, so pick one, but the name of the parameter passed to the handle <strong>*must* <\/strong>be \u2018event\u2019. The \u2018data-\u2018 attribute is the easiest way to store information for the checkbox location \u2013 the grid does the same thing with rows elements if you take a closer look and it\u2019s much easier to store it at creation as you then have access to the separate row data entry and will hardly add any overhead. Now just how easy it is with the Updating API to put that template to use:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkboxChanged(evt) {\n    \/\/ get rowID where change occured:\n    var rowId = $(evt.currentTarget).data().rowid;\n    $(\"#grid\").igGridUpdating(\"updateRow\", rowId, { \"SalariedFlag\": evt.currentTarget.checked });\n}<\/pre>\n\n\n\n<p>Using the <a title=\"JQUERY API - .data()\" href=\"http:\/\/api.jquery.com\/data\/\" target=\"_blank\" rel=\"noopener noreferrer\">jQuery data()<\/a> method gives us that row Id in a snap and the passed event can tell us the state of the checkbox to assign to that column value. Do note that this requires Updating to be loaded as a resource and added to the grid features(<a title=\"NetAdvantage\u00ae jQuery Online Help : igGrid Updating\" href=\"https:\/\/www.igniteui.com\/help\/iggrid-updating#enabling_updating\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" src=\"https:\/\/users.infragistics.com\/dpetev\/external_link.PNG\" alt=\"NetAdvantage\u00ae jQuery Online Help : igGrid Updating\" width=\"15\"><\/a>). And that leads to some issues that may arise<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When Updating Enters the Scene..<\/h3>\n\n\n\n<p>It\u2019s fairly reasonable to assume, since editing the checkboxes and Updating are already involved, that the grid is supposed to provide the full editing experience. However, once edit mode activated the edited cell\/row UI is separate one, which means that if you don\u2019t implement a provider yourself you will get the default combo-style editor:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/Checkbox-Columns-Alternatives\/basic-checkbox-column-editor.png\" alt=\"What happens with the template in edit mode.\" title=\"What happens with the template in edit mode.\"\/><\/figure>\n\n\n\n<p>Now that may or may not be a problem for you (it will work just fine and checkboxes will update once you exit edit mode), but the sake of consistent experience it would be nice if the editor could be a checkbox as well..preferably the same one. At this point you have quite a few options, really, I\u2019ll just provide a few examples how I think this can be made better and usable.<\/p>\n\n\n\n<p><strong>One little trick <\/strong>to try is setting that very same column as read-only. You already have a control that sets the value of the cell regardless of edit state and therefore you can go ahead and set that very same column as read only! What that would do is prevent the cell from getting its UI replaced by editor and in row mode it <strong>will remain unchanged<\/strong>. That means no combo like above and the very same checkbox with the same event handler still there ready for action. One tweak required though \u2013 since the Update Row method is not meant to be called from within edit session it will update the UI. All good? Nope. The issue is that in the case where you have the grid with the above setup and attempt updating a row when editing is activated \u2013 then awkward behavior is guaranteed. The UI is updated, <strong>but<\/strong> <strong>the editing is still active<\/strong> even though the grid looks like it exited that one and since there are not buttons or other elements that handle the editing of the editing session.. well it\u2019s stuck. I see a few options here, things like ending the editing (method is available of course) before calling the update row, but that immediately exits on checkbox change and that is probably not what the user would be expecting to happen. Then again you can disable the checkboxes while editing, but that\u2019s not the way to go when editing is active.<\/p>\n\n\n\n<p>What you can do is save the change directly to the data source transaction logs, after all the checkbox will take care of its UI, but it might require additional work (data dirty event, rebinding) to work properly with other features. You can also simply restart the editing on the very same row for the user:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkboxChanged(evt) {\n    \/\/ get rowID where change occured:\n    var rowId = $(evt.currentTarget).data().rowid;\n    \/\/ if editing is active - update just the cell, otherwise use row update\n    if($(\"#grid\").igGridUpdating(\"isEditing\")){\n        $(\"#grid\").igGridUpdating(\"endEdit\");\n        $(\"#grid\").igGridUpdating(\"setCellValue\", rowId, \"SalariedFlag\", evt.currentTarget.checked);\n         \n        \/\/optionally can start the editing on the same row again\n        \/\/need row index:\n        var rows = $(\"#grid\").igGrid(\"rows\");\n        var rowIndex;\n        \/\/var context = this;\n        $.each(rows, function (index, row) {\n            if ($(row).data().id == rowId) {\n                rowIndex = index;\n            }\n        });\n        \/\/make sure you let the calling code exit before attempting start edit,\n        \/\/ a few milliseconds should be enough\n        setTimeout(function () { $(\"#grid\").igGridUpdating(\"startEdit\", rowIndex, 1); }, 2);\n    }\n    else {\n        $(\"#grid\").igGridUpdating(\"updateRow\", rowId, { \"SalariedFlag\": evt.currentTarget.checked });\n    }\n}<\/pre>\n\n\n\n<p>Above snippet shows getting the row index from the ID and starting editing on that row with a small delay (event handler is called within anonymous function elsewhere). Ending and starting editing causes the change of UI, which in turn causes a slight flicker, but with some desire and CSS tweaking that can be changed.<\/p>\n\n\n\n<p>Do note that you can explore the possibility of creating custom editor provider for even better experience and I will show some about that in the next part.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">No Boolean? No problem!<\/h3>\n\n\n\n<p>If you noticed so far there\u2019s a really weak connection between the actual value and the representation \u2013 our logic dictates both representation and interaction result. SO nothing is really stopping you to use more than just Boolean \u2013 strings, numbers, null values \u2013 all quite plausible. Perhaps explore more than two states of the checkbox as well. Let\u2019s have AdventureWorks\u2019 SpecialOffers table where a MaxQty property for each offer states a maximum OR \u2018NULL\u2019. I want to not just display that data, I want to display an result of assessment of that instead. Might not be the best example, but I will have a column that will instead show if the offer <strong>has a maximum at all:<\/strong><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$.ig.loader(function () {\n    $(\"#grid\").igGrid({\n        primaryKey: \"SpecialOfferID\",\n        height: 550,\n        dataSource: \"@Url.Action(\"SpecialOffersData\")\",\n        autoGenerateColumns: false,\n        columns: [\n            { key: \"SpecialOfferID\", width: \"100px\", headerText: \"ID\", dataType: \"number\" , template: \"&lt;a style=\\'font-size:20px;\\' href=\\'http:\/\/msdn.microsoft.com\/en-us\/library\/ms124455(v=sql.100)\\'>${SpecialOfferID}&lt;\/a>'},\n            { key: \"Description\", width: \"250px\", headerText: \"Description\", dataType: \"string\" },\n            { key: \"Type\", width: \"220px\" , headerText: \"Type\", dataType: \"string\" },\n            { key: \"MaxQty\", width: \"150px\", headerText: \"Has MaxQty\", dataType: \"string\", template: \"&lt;input type=\\\"checkbox\\\" {{if parseInt(${MaxQty}) }} checked=\\\"checked\\\" {{\/if}} data-rowid=\\\"${SpecialOfferID}\\\"  data-test=\\\"${MaxQty}\\\" onchange=\\\"checkboxChanged(event);\\\" style=\\'display: block; margin-left: auto; margin-right: auto;\\'>'}\n        ],\n        features: [\n            { name: \"Filtering\", mode: \"advanced\", type: \"local\" },\n            { name: \"Sorting\", type: \"local\" },\n            { name: \"Updating\"}]\n    });\n});<\/pre>\n\n\n\n<p>Note the checkbox is being checked only if the value is not one of the \u2018false\u2019 equivalents (parsing returns NaN for example when it fails). Also you can set the values in much the same way \u2013 add null for&nbsp; false and default\/calculated value for true:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">function checkboxChanged(evt) {\n    \/\/ get rowID where change occured:\n    var rowId = $(evt.currentTarget).data().rowid;\n    var newValue = evt.currentTarget.checked ? 10 : null;\n    $(\"#grid\").igGridUpdating(\"updateRow\", rowId, { \"MaxQty\": newValue });\n}<\/pre>\n\n\n\n<p>The results (both from SQL Management Studio and the running app with the jQuery Grid):<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/Checkbox-Columns-Alternatives\/basic-alternative-checkbox-column-non-boolean.png\" alt=\"It's possible with checkbox template to display easily non-boolean values.\" title=\"It's possible with checkbox template to display easily non-boolean values.\"\/><\/figure>\n\n\n\n<p>And again the mentioned Updating tricks can be implemented for this in an identical manner.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"moving-on\">Moving On<\/h2>\n\n\n\n<p>Here\u2019s a quick comparison between the DIY template vs. the default Checkbox column:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">PROS<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Will work with other templates.<\/li>\n\n\n\n<li>Easy to implement &#8211; 1 line for simple scenarios.<\/li>\n\n\n\n<li>Not Limited to just Boolean values.<\/li>\n\n\n\n<li>As a custom solution it is not limited to a bi-state checkbox, an tri-state checkbox can be potentially implemented(<a title=\"JSFiddle showing a simple 3-state checkbox implementation.\" href=\"http:\/\/jsfiddle.net\/98BMK\/\" target=\"_blank\" rel=\"noopener noreferrer\"><img decoding=\"async\" width=\"15\" src=\"https:\/\/users.infragistics.com\/dpetev\/external_link.PNG\" alt=\"JSFiddle showing a simple 3-state checkbox implementation.\"><\/a>)<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">CONS<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Does require some code to achieve similar results.<\/li>\n\n\n\n<li>Can be somewhat complicated to implement IF it is also required to function within the Updating edit mode. Overall in tricky relationships with the Updating feature.<\/li>\n\n\n\n<li><p>The browser implementations don\u2019t look anything special and (correct me if I\u2019m wrong) are not guaranteed to look the same either.<\/p><br><\/li>\n<\/ul>\n\n\n\n<p>Hopefully this experience was helpful for all of those that have greater functionalities in mind in that defaults can provide. As I said above this is just me sharing experience, there\u2019s a learning curve here and this is not the only or final solution. <strong>Stay tuned for another approach in upcoming blog!<\/strong><\/p>\n\n\n\n<p><em><a title=\"ASP.NET MVC project demonstrating different features discussed above - both jQuery only and MVC grid setup.\" href=\"https:\/\/media.infragistics.com\/community\/Release\/12.1\/jQuery\/Checkbox-Columns-Alternatives\/CheckboxAlternatives1.zip\">Demo project is available for download<\/a>. As always, you can follow us on Twitter <\/em><a title=\"That would be me!\" href=\"https:\/\/twitter.com\/DamyanPetev\" rel=\"noopener\"><em>@DamyanPetev<\/em><\/a><em> and <\/em><a title=\"Infragistics on Twitter\" href=\"https:\/\/twitter.com\/infragistics\" target=\"_blank\" rel=\"noopener noreferrer\"><em>@Infragistics<\/em><\/a><em> and stay in touch on <\/em><a title=\"Infragistics on Facebook\" href=\"http:\/\/www.facebook.com\/infragistics\" target=\"_blank\" rel=\"noopener noreferrer\"><em>Facebook<\/em><\/a><em>, <\/em><a title=\"Infragistics on Google+\" href=\"https:\/\/plus.google.com\/110651137371189140377\" target=\"_blank\" rel=\"noopener noreferrer\"><em>Google+<\/em><\/a><em> and <\/em><a title=\"Infragistics on LinkedIn\" href=\"http:\/\/www.linkedin.com\/company\/16069\" target=\"_blank\" rel=\"noopener noreferrer\"><em>LinkedIn<\/em><\/a><em>!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The checkbox column (introduced with the last release, see this post on Using Checkbox Columns with the Infragistics jQuery Grid) was created to provide a \u2018shortcut\u2019 for transforming columns with Boolean values into checkboxes and mostly became reality due to the great interest in such functionality from customers (and after all it does make perfect sense).<\/p>\n","protected":false},"author":68,"featured_media":2370,"comment_status":"publish","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,17],"tags":[],"class_list":["post-395","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jquery","category-how-to"],"_links":{"self":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/users\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":3,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":2411,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/posts\/395\/revisions\/2411"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media\/2370"}],"wp:attachment":[{"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/media?parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/categories?post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infragistics.com\/blogs\/wp-json\/wp\/v2\/tags?post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}