{"action":"created","issue":{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/314","labels_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/314/labels{/name}","comments_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/314/comments","events_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/314/events","html_url":"https://github.com/bem/bem-forum-content-ru/issues/314","id":63837915,"number":314,"title":"bemjson на клиенте и оптимизация","user":{"login":"kompolom","id":6213808,"avatar_url":"https://avatars.githubusercontent.com/u/6213808?v=3","gravatar_id":"","url":"https://api.github.com/users/kompolom","html_url":"https://github.com/kompolom","followers_url":"https://api.github.com/users/kompolom/followers","following_url":"https://api.github.com/users/kompolom/following{/other_user}","gists_url":"https://api.github.com/users/kompolom/gists{/gist_id}","starred_url":"https://api.github.com/users/kompolom/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kompolom/subscriptions","organizations_url":"https://api.github.com/users/kompolom/orgs","repos_url":"https://api.github.com/users/kompolom/repos","events_url":"https://api.github.com/users/kompolom/events{/privacy}","received_events_url":"https://api.github.com/users/kompolom/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/asktheteam","name":"asktheteam","color":"fef2c0"},{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/bemjson","name":"bemjson","color":"bfe5bf"},{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/bh","name":"bh","color":"bfe5bf"},{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/labels/i-bem","name":"i-bem","color":"bfe5bf"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":23,"created_at":"2015-03-23T21:33:20Z","updated_at":"2015-03-24T22:18:46Z","closed_at":null,"body":"Есть у меня несколько блоков которые ходят в api за данными, затем на клиенте дорисовывают modal на основе полученного `json`а.  Шаблоны содержимого разные, а вот функции которые дергают api одинаковые (они одну и ту же ручку дергают, с разными параметрами).  Руки чешутся вынести эти функции куда-нить, чтобы не дублировался код. Как это сделать правильно с точки зрения методологии? И главное, куда их оформить?\r\n\r\nВопрос №2.\r\nТе же блоки. bemjson по которому собирается modal у меня хранится прямо в js модуле блока. Это нормально?"},"comment":{"url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/comments/85716400","html_url":"https://github.com/bem/bem-forum-content-ru/issues/314#issuecomment-85716400","issue_url":"https://api.github.com/repos/bem/bem-forum-content-ru/issues/314","id":85716400,"user":{"login":"zxqfox","id":677518,"avatar_url":"https://avatars.githubusercontent.com/u/677518?v=3","gravatar_id":"","url":"https://api.github.com/users/zxqfox","html_url":"https://github.com/zxqfox","followers_url":"https://api.github.com/users/zxqfox/followers","following_url":"https://api.github.com/users/zxqfox/following{/other_user}","gists_url":"https://api.github.com/users/zxqfox/gists{/gist_id}","starred_url":"https://api.github.com/users/zxqfox/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zxqfox/subscriptions","organizations_url":"https://api.github.com/users/zxqfox/orgs","repos_url":"https://api.github.com/users/zxqfox/repos","events_url":"https://api.github.com/users/zxqfox/events{/privacy}","received_events_url":"https://api.github.com/users/zxqfox/received_events","type":"User","site_admin":false},"created_at":"2015-03-24T22:18:46Z","updated_at":"2015-03-24T22:18:46Z","body":"@belozyorcev Не обязательно. Тут опять же смотря как их писать.\r\n\r\nВот есть у тебя формы — bemtree будут очень полезны, чтобы из схемы типа:\r\n```js\r\n{\r\n  id : { type: 'integer', caption: '#', default: 1, sequence: 'yolo' },\r\n  name : { type: 'string', caption: 'Name' },\r\n  country : { type: 'integer', viewtype: 'select', data: countries },\r\n  // etc.\r\n}\r\n```\r\nсделать bemjson для формы. А после, когда приедут данные из формы, отвалидировать, что число в country является существующим id страны из списка доступных стран, например. И алгоритм сборки такой схемы никак не зависит от проекта, но зависит от набора блоков, которые он использует.\r\n\r\nА если собирать страницу, и в ней явно указывать блоки, которые нужно отрисовать, то страница тоже будет зависеть от имеющихся блоков, но её структура врядли будет удобна для двух разных сайтов.\r\n\r\nНо т.к. bemtree, как и bemhtml/bh, можно доопределять (в теории, совершенно как угодно), то мы легко можем создать такой набор базовых шаблонов для формы, который подойдет большинству, и нужные фичи они либо подключат модификаторами, либо доопределят на уровне проекта. Со страницами, конечно, такое тоже возможно, но боюсь, что сложность будет зашкаливать и, кажется, проще научить писать bemtree, чем учесть даже не все, но какую-то значимую часть различных страниц. Думаю, со страницами еще играет скорость их изменения — кто мог подумать о нестандартно скроллящихся, например, или об SPA лет 10 назад? ;-) С формами, в этом отношении, все намного проще.\r\n\r\nВ общем, по-разному ;-)."}}